From bdd30c49aac4996191a081882adc2390b6531261 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 4 Sep 2023 13:45:08 +0000 Subject: [PATCH] Rebuild pages at 8ac834a9112b29d5e106be17c10aa1a7cfcc3a6f --- AlfredBeNoel_ip_master/authorship.json | 2 +- AlfredBeNoel_ip_master/commits.json | 2 +- B-enguin_ip_master/authorship.json | 2 +- B-enguin_ip_master/commits.json | 2 +- Bombbird2001_ip_master/authorship.json | 2 +- Bombbird2001_ip_master/commits.json | 2 +- CelestineTan03_ip_master/authorship.json | 2 +- CelestineTan03_ip_master/commits.json | 2 +- ChongWeiJie29_ip_master/authorship.json | 2 +- ChongWeiJie29_ip_master/commits.json | 2 +- Clin-lyx_ip_master/authorship.json | 2 +- Clin-lyx_ip_master/commits.json | 2 +- DeltonCheng_ip_master/authorship.json | 2 +- DeltonCheng_ip_master/commits.json | 2 +- EricXiong420_ip_master/authorship.json | 2 +- EricXiong420_ip_master/commits.json | 2 +- Fallman2_ip_master/authorship.json | 2 +- Fallman2_ip_master/commits.json | 2 +- JasonRay168_ip_master/authorship.json | 2 +- JasonRay168_ip_master/commits.json | 2 +- Kokseng1_ip_master/authorship.json | 2 +- Kokseng1_ip_master/commits.json | 2 +- LuahJunYang_ip_master/authorship.json | 2 +- LuahJunYang_ip_master/commits.json | 2 +- McNaBry_ip_master/authorship.json | 2 +- McNaBry_ip_master/commits.json | 2 +- NereusWB922_ip_master/authorship.json | 2 +- NereusWB922_ip_master/commits.json | 2 +- PearlynnT_ip_master/authorship.json | 2 +- PearlynnT_ip_master/commits.json | 2 +- RiyaMehta2211_ip_master/commits.json | 2 +- Sheeepen_ip_master/authorship.json | 2 +- Sheeepen_ip_master/commits.json | 2 +- SimWPEric_ip_master/authorship.json | 2 +- SimWPEric_ip_master/commits.json | 2 +- SynapseProgramming_ip_master/commits.json | 2 +- Tang-Moyan_ip_master/authorship.json | 2 +- Tang-Moyan_ip_master/commits.json | 2 +- Vanessamae23_ip_master/authorship.json | 2 +- Vanessamae23_ip_master/commits.json | 2 +- WangCheng0116_ip_master/authorship.json | 2 +- WangCheng0116_ip_master/commits.json | 2 +- ZD292_ip_master/authorship.json | 2 +- ZD292_ip_master/commits.json | 2 +- adammangzijun_ip_master/commits.json | 2 +- andrefoo_ip_master/authorship.json | 2 +- andrefoo_ip_master/commits.json | 2 +- archive.zip | Bin 7061704 -> 7200418 bytes butteredyakiimo_ip_master/authorship.json | 2 +- butteredyakiimo_ip_master/commits.json | 2 +- bwangpj_ip_master/authorship.json | 2 +- bwangpj_ip_master/commits.json | 2 +- darrentfy_ip_master/authorship.json | 2 +- darrentfy_ip_master/commits.json | 2 +- dhruvir29_ip_master/authorship.json | 2 +- dhruvir29_ip_master/commits.json | 2 +- dlathyun_ip_master/authorship.json | 2 +- dlathyun_ip_master/commits.json | 2 +- dylkaw_ip_master/authorship.json | 2 +- dylkaw_ip_master/commits.json | 2 +- evanyan13_ip_master/authorship.json | 2 +- evanyan13_ip_master/commits.json | 2 +- eyelessrhyme7_ip_master/authorship.json | 2 +- eyelessrhyme7_ip_master/commits.json | 2 +- geraldngjx_ip_master/commits.json | 2 +- gongg21_ip_master/authorship.json | 2 +- gongg21_ip_master/commits.json | 2 +- jason-raiin_ip_master/commits.json | 2 +- javinchua_ip_master/authorship.json | 2 +- javinchua_ip_master/commits.json | 2 +- jean-cq_ip_master/authorship.json | 2 +- jean-cq_ip_master/commits.json | 2 +- jellywaiyan_ip_master/authorship.json | 2 +- jellywaiyan_ip_master/commits.json | 2 +- ji-just-ji_ip_master/authorship.json | 2 +- ji-just-ji_ip_master/commits.json | 2 +- joeng03_ip_master/authorship.json | 2 +- joeng03_ip_master/commits.json | 2 +- jonasongg_ip_master/commits.json | 2 +- jonyeokj_ip_master/authorship.json | 2 +- jonyeokj_ip_master/commits.json | 2 +- josepholim_ip_master/authorship.json | 2 +- josepholim_ip_master/commits.json | 2 +- jrchoo_ip_master/authorship.json | 2 +- jrchoo_ip_master/commits.json | 2 +- juliusgambe_ip_master/authorship.json | 2 +- juliusgambe_ip_master/commits.json | 2 +- keaganpzh_ip_master/authorship.json | 2 +- keaganpzh_ip_master/commits.json | 2 +- kohkaijie_ip_master/authorship.json | 2 +- kohkaijie_ip_master/commits.json | 2 +- kristayeo_ip_master/authorship.json | 2 +- kristayeo_ip_master/commits.json | 2 +- lawruixi_ip_master/authorship.json | 2 +- lawruixi_ip_master/commits.json | 2 +- lilozz2_ip_master/authorship.json | 2 +- lilozz2_ip_master/commits.json | 2 +- mamayuan_ip_master/authorship.json | 2 +- mamayuan_ip_master/commits.json | 2 +- migfoo02_ip_master/commits.json | 2 +- mingyuanc_ip_master/commits.json | 2 +- nananakx-x_ip_master/authorship.json | 2 +- nananakx-x_ip_master/commits.json | 2 +- ngeeyonglim_ip_master/authorship.json | 2 +- ngeeyonglim_ip_master/commits.json | 2 +- nixonwidjaja_ip_master/authorship.json | 2 +- nixonwidjaja_ip_master/commits.json | 2 +- nreHieW_ip_master/authorship.json | 2 +- nreHieW_ip_master/commits.json | 2 +- peiran18_ip_master/commits.json | 2 +- pra-navi_ip_master/commits.json | 2 +- proto-aiken-13_ip_master/authorship.json | 2 +- proto-aiken-13_ip_master/commits.json | 2 +- quzhetao01_ip_master/commits.json | 2 +- raydenlim_ip_master/commits.json | 2 +- reposense-logs/reposense.log.0 | 14200 +++++++++---------- revdrag_ip_master/authorship.json | 2 +- revdrag_ip_master/commits.json | 2 +- ruo-x_ip_master/authorship.json | 2 +- ruo-x_ip_master/commits.json | 2 +- ryantzr1_ip_master/authorship.json | 2 +- ryantzr1_ip_master/commits.json | 2 +- s-peiran_ip_master/commits.json | 2 +- s0ngyang_ip_master/authorship.json | 2 +- s0ngyang_ip_master/commits.json | 2 +- shashahchk_ip_master/authorship.json | 2 +- shashahchk_ip_master/commits.json | 2 +- sp4ce-cowboy_ip_master/authorship.json | 2 +- sp4ce-cowboy_ip_master/commits.json | 2 +- sudarshan2401_ip_master/authorship.json | 2 +- sudarshan2401_ip_master/commits.json | 2 +- summary.json | 2 +- supermii2_ip_master/authorship.json | 2 +- supermii2_ip_master/commits.json | 2 +- tayruxin_ip_master/authorship.json | 2 +- tayruxin_ip_master/commits.json | 2 +- techjay-c_ip_master/authorship.json | 2 +- techjay-c_ip_master/commits.json | 2 +- tllshan_ip_master/authorship.json | 2 +- tllshan_ip_master/commits.json | 2 +- victorlaiyeeteng_ip_master/authorship.json | 2 +- victorlaiyeeteng_ip_master/commits.json | 2 +- weeweh_ip_master/authorship.json | 2 +- weeweh_ip_master/commits.json | 2 +- ylyma_ip_master/authorship.json | 2 +- ylyma_ip_master/commits.json | 2 +- zacwong2151_ip_master/authorship.json | 2 +- zacwong2151_ip_master/commits.json | 2 +- zekone_ip_master/authorship.json | 2 +- zekone_ip_master/commits.json | 2 +- 150 files changed, 7248 insertions(+), 7248 deletions(-) diff --git a/AlfredBeNoel_ip_master/authorship.json b/AlfredBeNoel_ip_master/authorship.json index e48a5c33..3f371502 100644 --- a/AlfredBeNoel_ip_master/authorship.json +++ b/AlfredBeNoel_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/noel.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"T | 0 | read","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"E | 0 | ori | (from: 2033-04-04 06:00 to: 2020-04-04 06:00)","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":2}},{"path":"src/main/java/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[D]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate dueDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime dueTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" public Deadlines(String taskName, LocalDate deadlineDate, LocalTime deadlineTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" this.dueDate \u003d deadlineDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" this.dueTime \u003d deadlineTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatDate() {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" return this.dueDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatTime() {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" return this.dueTime.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" String taskDetails \u003d super.getTaskName() + \" | \" + formatDate() + \" \" + formatTime();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" return \"D | \" + super.getStatusNumber() + \" | \" + taskDetails;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString() + \" (by: \" + formatDate() + \" \" + formatTime() + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":35}},{"path":"src/main/java/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"public class Events extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[E]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate startDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime startTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate endDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime endTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" protected String dateString \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" public Events(String taskName, LocalDate startDate, LocalTime startTime, LocalDate endDate, LocalTime endTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" setDates(startDate, startTime, endDate, endTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" return date.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatTime(LocalTime time) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" return time.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" public void setDates(LocalDate start, LocalTime startTime, LocalDate end, LocalTime endTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" this.startDate \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" this.endDate \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" String startDateTime \u003d formatDate(this.startDate) + \" \" + formatTime(this.startTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" String endDateTime \u003d formatDate(this.endDate) + \" \" + formatTime(this.endTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" this.dateString \u003d \" (from: \" + startDateTime + \" to: \" + endDateTime + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" return \"E | \" + super.getStatusNumber() + \" | \" + this.taskName + \" | \" + this.dateString;","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString() + this.dateString;","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":46}},{"path":"src/main/java/Noel.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":"public class Noel {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" static String FILEPATH \u003d \"./data/noel.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" static String HELLO_MSG \u003d \" Hello! I\u0027m Noel!\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" static String BYE_MSG \u003d \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" static boolean fileInserted \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" static int maxSize \u003d 100;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" static ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" static String addedMessageStart \u003d \"Got it. I\u0027ve added this task:\";","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" public static void printFunction(String message){","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler + \"\\n\" + message + \"\\n\" + filler);","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" public static boolean checkFull() {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.size() \u003d\u003d maxSize;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" public static boolean checkEmpty() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.size() \u003d\u003d 0;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" public static void addToDo(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new ToDos(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":" public static void addDeadline(String task, String endDate) {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate date \u003d dateFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"AlfredBeNoel"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime time \u003d timeFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"AlfredBeNoel"},"content":" if (time \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new Deadlines(task, date, time);","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"AlfredBeNoel"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"AlfredBeNoel"},"content":" public static LocalTime timeFormat(String date) {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime time \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter1 \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"AlfredBeNoel"},"content":" time \u003d LocalTime.parse(date, formatter1);","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"AlfredBeNoel"},"content":" time \u003d LocalTime.parse(date, formatter2);","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Time Format\");","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"AlfredBeNoel"},"content":" return time;","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"AlfredBeNoel"},"content":" public static LocalDate dateFormat(String endDate) {","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate date \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter1 \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"AlfredBeNoel"},"content":" date \u003d LocalDate.parse(endDate, formatter1);","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"AlfredBeNoel"},"content":" return date;","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"AlfredBeNoel"},"content":" date \u003d LocalDate.parse(endDate, formatter2);","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"AlfredBeNoel"},"content":" return date;","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date format\");","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"AlfredBeNoel"},"content":" return date;","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"AlfredBeNoel"},"content":" public static void addEvent(String task, String startDate, String endDate) {","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate startDateFormat \u003d dateFormat(startDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate endDateFormat \u003d dateFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime startTimeFormat \u003d timeFormat(startDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime endTimeFormat \u003d timeFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"AlfredBeNoel"},"content":" if (startDateFormat \u003d\u003d null || endDateFormat \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid format for start/end date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"AlfredBeNoel"},"content":" if (startTimeFormat \u003d\u003d null || endTimeFormat \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid format for start/end time!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new Events(task, startDateFormat, startTimeFormat, endDateFormat, endTimeFormat);","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":141,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"AlfredBeNoel"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":150,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":151,"author":{"gitId":"AlfredBeNoel"},"content":" public static void printTaskList(){","lastModifiedDate":"2023-08-23"},{"lineNumber":152,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkEmpty()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":153,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"List is empty!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":154,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":155,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-23"},{"lineNumber":156,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-08-23"},{"lineNumber":157,"author":{"gitId":"AlfredBeNoel"},"content":" int maxLength \u003d taskList.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":158,"author":{"gitId":"AlfredBeNoel"},"content":" for (int i \u003d 0; i \u003c maxLength; i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(i + 1 + \". \" + taskList.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":161,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-08-23"},{"lineNumber":162,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":163,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":164,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":165,"author":{"gitId":"AlfredBeNoel"},"content":" public static void checkFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"AlfredBeNoel"},"content":" Path filePath \u003d Paths.get(FILEPATH);","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"AlfredBeNoel"},"content":" if (Files.exists(filePath)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"AlfredBeNoel"},"content":" String content \u003d new String(Files.readAllBytes(filePath));","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"AlfredBeNoel"},"content":" updateTaskList(content);","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"File does not exist\");","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Creating file now!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"AlfredBeNoel"},"content":" Files.createDirectories(filePath.getParent());","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"AlfredBeNoel"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"File and Directories created!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"AlfredBeNoel"},"content":" public static void updateTaskList(String content) {","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"AlfredBeNoel"},"content":" String[] listOfStrings \u003d content.split(\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(Arrays.toString(listOfStrings));","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"AlfredBeNoel"},"content":" for (String line : listOfStrings) {","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"AlfredBeNoel"},"content":" String[] values \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length !\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"AlfredBeNoel"},"content":" if (Objects.equals(values[0], \"E\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 4) {","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"AlfredBeNoel"},"content":" // (from: 02 02 2023 06:00 to: 03 02 2023 06:00)","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"AlfredBeNoel"},"content":" String[] dates \u003d values[3].split(\"to:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"AlfredBeNoel"},"content":" String[] startDateArray \u003d dates[0].split(\"\\\\(from: \")[1].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"AlfredBeNoel"},"content":" String startDate \u003d startDateArray[0] + \" \" + startDateArray[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":202,"author":{"gitId":"AlfredBeNoel"},"content":" String[] endDateArray \u003d dates[1].split(\"\\\\)\")[0].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"AlfredBeNoel"},"content":" String endDate \u003d endDateArray[1] + \" \" + endDateArray[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"AlfredBeNoel"},"content":" if (dates.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":206,"author":{"gitId":"AlfredBeNoel"},"content":" addEvent(values[2], startDate, endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":207,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (Objects.equals(values[0], \"T\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"AlfredBeNoel"},"content":" addToDo(values[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (Objects.equals(values[0], \"D\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":221,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 4) {","lastModifiedDate":"2023-09-02"},{"lineNumber":222,"author":{"gitId":"AlfredBeNoel"},"content":" addDeadline(values[2], values[3]);","lastModifiedDate":"2023-09-02"},{"lineNumber":223,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":224,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":225,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":226,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":227,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":228,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":229,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":230,"author":{"gitId":"AlfredBeNoel"},"content":" if (Objects.equals(values[1], \"1\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":231,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.get(taskList.size() - 1).markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":232,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":233,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":234,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"No value in file at \" + FILEPATH);","lastModifiedDate":"2023-09-04"},{"lineNumber":235,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":236,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":237,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":238,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"AlfredBeNoel"},"content":" public static List\u003cString\u003e getTaskAsList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":240,"author":{"gitId":"AlfredBeNoel"},"content":" List\u003cString\u003e linesToAppend \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":241,"author":{"gitId":"AlfredBeNoel"},"content":" for (Task t:taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"AlfredBeNoel"},"content":" linesToAppend.add(t.toFileString());","lastModifiedDate":"2023-09-02"},{"lineNumber":243,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":244,"author":{"gitId":"AlfredBeNoel"},"content":" return linesToAppend.subList(0, linesToAppend.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":245,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":246,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":247,"author":{"gitId":"AlfredBeNoel"},"content":" public static void updateFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":248,"author":{"gitId":"AlfredBeNoel"},"content":" if (fileInserted) {","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":250,"author":{"gitId":"AlfredBeNoel"},"content":" List\u003cString\u003e linesToAppend \u003d getTaskAsList();","lastModifiedDate":"2023-09-02"},{"lineNumber":251,"author":{"gitId":"AlfredBeNoel"},"content":" Files.write(Paths.get(FILEPATH), linesToAppend);","lastModifiedDate":"2023-09-02"},{"lineNumber":252,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":253,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":254,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":255,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":256,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":259,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":260,"author":{"gitId":"AlfredBeNoel"},"content":" checkFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(HELLO_MSG);","lastModifiedDate":"2023-09-02"},{"lineNumber":262,"author":{"gitId":"AlfredBeNoel"},"content":" fileInserted \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":264,"author":{"gitId":"AlfredBeNoel"},"content":" Scanner in \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":265,"author":{"gitId":"AlfredBeNoel"},"content":" String nextLine \u003d in.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":266,"author":{"gitId":"AlfredBeNoel"},"content":" String command;","lastModifiedDate":"2023-08-24"},{"lineNumber":267,"author":{"gitId":"AlfredBeNoel"},"content":" String[] deadlineHelper;","lastModifiedDate":"2023-08-24"},{"lineNumber":268,"author":{"gitId":"AlfredBeNoel"},"content":" String[] eventsHelper;","lastModifiedDate":"2023-08-24"},{"lineNumber":269,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":270,"author":{"gitId":"AlfredBeNoel"},"content":" while (!nextLine.equals(\"bye\")){","lastModifiedDate":"2023-08-23"},{"lineNumber":271,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":272,"author":{"gitId":"AlfredBeNoel"},"content":" if (nextLine.equals(\"list\")){","lastModifiedDate":"2023-08-23"},{"lineNumber":273,"author":{"gitId":"AlfredBeNoel"},"content":" printTaskList();","lastModifiedDate":"2023-08-23"},{"lineNumber":274,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (nextLine.contains(\" \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":275,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":276,"author":{"gitId":"AlfredBeNoel"},"content":" // multiple values","lastModifiedDate":"2023-08-24"},{"lineNumber":277,"author":{"gitId":"AlfredBeNoel"},"content":" String[] result \u003d nextLine.split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":278,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":279,"author":{"gitId":"AlfredBeNoel"},"content":" command \u003d result[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":280,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":281,"author":{"gitId":"AlfredBeNoel"},"content":" switch (command) {","lastModifiedDate":"2023-08-24"},{"lineNumber":282,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":283,"author":{"gitId":"AlfredBeNoel"},"content":" case \"mark\": {","lastModifiedDate":"2023-08-24"},{"lineNumber":284,"author":{"gitId":"AlfredBeNoel"},"content":" int taskNum \u003d Integer.parseInt(result[1]);","lastModifiedDate":"2023-08-23"},{"lineNumber":285,"author":{"gitId":"AlfredBeNoel"},"content":" taskNum \u003d taskNum - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":286,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.get(taskNum).markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":287,"author":{"gitId":"AlfredBeNoel"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":288,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":289,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":290,"author":{"gitId":"AlfredBeNoel"},"content":" case \"unmark\": {","lastModifiedDate":"2023-08-24"},{"lineNumber":291,"author":{"gitId":"AlfredBeNoel"},"content":" int taskNum \u003d Integer.parseInt(result[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":292,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.get(taskNum).unMark();","lastModifiedDate":"2023-08-24"},{"lineNumber":293,"author":{"gitId":"AlfredBeNoel"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":294,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":295,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":296,"author":{"gitId":"AlfredBeNoel"},"content":" case \"todo\":","lastModifiedDate":"2023-08-24"},{"lineNumber":297,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"todo \");","lastModifiedDate":"2023-08-24"},{"lineNumber":298,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":299,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":300,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":301,"author":{"gitId":"AlfredBeNoel"},"content":" addToDo(result[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":302,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":303,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":304,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":305,"author":{"gitId":"AlfredBeNoel"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-24"},{"lineNumber":306,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"deadline \");","lastModifiedDate":"2023-08-24"},{"lineNumber":307,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":308,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":309,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":310,"author":{"gitId":"AlfredBeNoel"},"content":" deadlineHelper \u003d result[1].split(\" /by \");","lastModifiedDate":"2023-08-24"},{"lineNumber":311,"author":{"gitId":"AlfredBeNoel"},"content":" if (deadlineHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":312,"author":{"gitId":"AlfredBeNoel"},"content":" addDeadline(deadlineHelper[0], deadlineHelper[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":313,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":314,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! Remember to add the date/description\");","lastModifiedDate":"2023-08-24"},{"lineNumber":315,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":316,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":317,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":318,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":319,"author":{"gitId":"AlfredBeNoel"},"content":" case \"event\":","lastModifiedDate":"2023-08-24"},{"lineNumber":320,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"event \");","lastModifiedDate":"2023-08-24"},{"lineNumber":321,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":322,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":323,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":324,"author":{"gitId":"AlfredBeNoel"},"content":" eventsHelper \u003d result[1].split(\" /from \");","lastModifiedDate":"2023-08-24"},{"lineNumber":325,"author":{"gitId":"AlfredBeNoel"},"content":" command \u003d eventsHelper[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":326,"author":{"gitId":"AlfredBeNoel"},"content":" if (eventsHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":327,"author":{"gitId":"AlfredBeNoel"},"content":" eventsHelper \u003d eventsHelper[1].split(\" /to \");","lastModifiedDate":"2023-08-24"},{"lineNumber":328,"author":{"gitId":"AlfredBeNoel"},"content":" if (eventsHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":329,"author":{"gitId":"AlfredBeNoel"},"content":" addEvent(command, eventsHelper[0], eventsHelper[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":330,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":331,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Insufficient commands provided!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":332,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":333,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":334,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Insufficient commands provided!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":335,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":336,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":337,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":338,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":339,"author":{"gitId":"AlfredBeNoel"},"content":" case \"delete\":","lastModifiedDate":"2023-08-24"},{"lineNumber":340,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"delete \");","lastModifiedDate":"2023-08-24"},{"lineNumber":341,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":342,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a delete cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":343,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":344,"author":{"gitId":"AlfredBeNoel"},"content":" int intToRemove \u003d Integer.parseInt(result[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":345,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToDel \u003d taskList.get(intToRemove);","lastModifiedDate":"2023-08-24"},{"lineNumber":346,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.remove(intToRemove);","lastModifiedDate":"2023-08-24"},{"lineNumber":347,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":348,"author":{"gitId":"AlfredBeNoel"},"content":" String delStart \u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":349,"author":{"gitId":"AlfredBeNoel"},"content":" String delEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-08-24"},{"lineNumber":350,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(delStart + taskToDel + \"\\n\" + delEnd);","lastModifiedDate":"2023-08-24"},{"lineNumber":351,"author":{"gitId":"AlfredBeNoel"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":352,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-08-24"},{"lineNumber":353,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":354,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":355,"author":{"gitId":"AlfredBeNoel"},"content":" default:","lastModifiedDate":"2023-08-24"},{"lineNumber":356,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Option!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":357,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":358,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":359,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Option!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":360,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":361,"author":{"gitId":"AlfredBeNoel"},"content":" nextLine \u003d in.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":362,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":363,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":364,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(BYE_MSG);","lastModifiedDate":"2023-09-02"},{"lineNumber":365,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":366,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":367,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"AlfredBeNoel":364,"-":3}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":" protected String taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" public String getStatusNumber() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" return (isDone ? \"1\" : \"0\"); // mark done task with 1","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" public String getTaskName() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" return this.taskName;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" return \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" private void markPrintHelper(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" markPrintHelper(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" public void unMark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" markPrintHelper(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"AlfredBeNoel":50}},{"path":"src/main/java/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"public class ToDos extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[T]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":" public ToDos(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" return \"T | \" + super.getStatusNumber() + \" | \" + super.getTaskName();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":19}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":"java -classpath ../bin Noel \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":{"AlfredBeNoel":1,"-":37}}] +[{"path":"data/noel.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"T | 1 | read","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"E | 1 | ori | (from: 2033-04-04 06:00 to: 2020-04-04 06:00)","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"D | 0 | read | 2023-04-03 06:00","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"T | 0 | read","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":4}},{"path":"src/main/java/noel/Noel.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.exceptions.NoelException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.helper.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.helper.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.helper.Tasklist;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.helper.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"public class Noel {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" static String HELLO_MSG \u003d \" Hello! I\u0027m Noel!\\nWhat can I do for you?\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" static String BYE_MSG \u003d \" Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" private Tasklist tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public Noel(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" Storage storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" tasks \u003d new Tasklist(storage.load());","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (NoelException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" tasks \u003d new Tasklist();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" } finally {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" storage.updateFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" parser \u003d new Parser(tasks, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" public String chatHelper() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" return this.ui.getNextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" public static void printFunction(String message){","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler + \"\\n\" + message + \"\\n\" + filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(HELLO_MSG);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" String nextLine \u003d chatHelper();","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" int commandOption \u003d parser.parseCommand(nextLine);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" while (commandOption !\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" nextLine \u003d ui.getNextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" commandOption \u003d parser.parseCommand(nextLine);","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(BYE_MSG);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":" new Noel(\"./data/noel.txt\").run();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":55}},{"path":"src/main/java/noel/exceptions/NoelException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"public class NoelException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":" public NoelException(String errorMsg) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":" super(errorMsg);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":7}},{"path":"src/main/java/noel/helper/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.helper;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" private final Tasklist tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" public Parser(Tasklist tasks, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" public static void printFunction(String message){","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler + \"\\n\" + message + \"\\n\" + filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" public int parseCommand(String nextLine) {","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" String command;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" if (nextLine.equals(\"bye\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" return -1;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (nextLine.equals(\"list\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.printTaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (nextLine.contains(\" \")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" String[] result \u003d nextLine.split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" command \u003d result[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" switch (command) {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" int taskNum \u003d Integer.parseInt(result[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" taskNum \u003d taskNum - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.markAsDone(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" int taskNum \u003d Integer.parseInt(result[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.unMark(taskNum);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" case \"todo\":","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"todo \");","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.addToDo(result[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"AlfredBeNoel"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"deadline \");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"AlfredBeNoel"},"content":" String[] deadlineHelper \u003d result[1].split(\" /by \");","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"AlfredBeNoel"},"content":" if (deadlineHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.addDeadline(deadlineHelper[0], deadlineHelper[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! Remember to add the date/description\");","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"AlfredBeNoel"},"content":" case \"event\":","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"event \");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a event cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"AlfredBeNoel"},"content":" String[] eventsHelper \u003d result[1].split(\" /from \");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"AlfredBeNoel"},"content":" command \u003d eventsHelper[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"AlfredBeNoel"},"content":" if (eventsHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"AlfredBeNoel"},"content":" eventsHelper \u003d eventsHelper[1].split(\" /to \");","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"AlfredBeNoel"},"content":" if (eventsHelper.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.addEvent(command, eventsHelper[0], eventsHelper[1]);","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Insufficient commands provided!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Insufficient commands provided!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"AlfredBeNoel"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"AlfredBeNoel"},"content":" result \u003d nextLine.split(\"delete \");","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"AlfredBeNoel"},"content":" if (result.length \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"OOPS!!! The description of a delete cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"AlfredBeNoel"},"content":" int intToRemove \u003d Integer.parseInt(result[1]) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToDel \u003d tasks.get(intToRemove);","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"AlfredBeNoel"},"content":" tasks.remove(intToRemove);","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"AlfredBeNoel"},"content":" String delStart \u003d \"Noted. I\u0027ve removed this task:\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"AlfredBeNoel"},"content":" String delEnd \u003d \"Now you have \" + tasks.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(delStart + taskToDel + \"\\n\" + delEnd);","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"AlfredBeNoel"},"content":" storage.writeToFile(tasks.getTaskAsList());","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"AlfredBeNoel"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"AlfredBeNoel"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Option!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Option!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"AlfredBeNoel"},"content":" return 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":116}},{"path":"src/main/java/noel/helper/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.helper;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" private final String filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" protected boolean hasFileUpdated;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" hasFileUpdated \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" public String load() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" return checkFile();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" public void updateFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" this.hasFileUpdated \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" public String checkFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" Path filePath \u003d Paths.get(this.filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" if (Files.exists(filePath)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" return new String(Files.readAllBytes(filePath));","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" hasFileUpdated \u003d true;","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"File does not exist\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Creating file now!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" Files.createDirectories(filePath.getParent());","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" Files.createFile(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"File and Directories created!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":" public void writeToFile(List\u003cString\u003e task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" if (hasFileUpdated) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" Files.write(Paths.get(filePath), task);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":60}},{"path":"src/main/java/noel/helper/Tasklist.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.helper;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.exceptions.NoelException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.tasks.Deadlines;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.tasks.Events;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.tasks.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"import noel.tasks.ToDos;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"public class Tasklist {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" static String addedMessageStart \u003d \"Got it. I\u0027ve added this task:\";","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" public Tasklist(String listOfTasks) throws NoelException {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" if (listOfTasks \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" throw new NoelException(\"No content in file!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" updateTaskList(listOfTasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" public Tasklist() {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" public boolean checkFull() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" int maxSize \u003d 100;","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.size() \u003d\u003d maxSize;","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" public boolean checkEmpty() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.size() \u003d\u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" public void updateTaskList(String content) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" String[] listOfStrings \u003d content.split(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(Arrays.toString(listOfStrings));","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" for (String line : listOfStrings) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" String[] values \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length !\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"AlfredBeNoel"},"content":" if (Objects.equals(values[0], \"E\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 4) {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"AlfredBeNoel"},"content":" // (from: 02 02 2023 06:00 to: 03 02 2023 06:00)","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"AlfredBeNoel"},"content":" String[] dates \u003d values[3].split(\"to:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"AlfredBeNoel"},"content":" String[] startDateArray \u003d dates[0].split(\"\\\\(from: \")[1].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"AlfredBeNoel"},"content":" String startDate \u003d startDateArray[0] + \" \" + startDateArray[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"AlfredBeNoel"},"content":" String[] endDateArray \u003d dates[1].split(\"\\\\)\")[0].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"AlfredBeNoel"},"content":" String endDate \u003d endDateArray[1] + \" \" + endDateArray[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"AlfredBeNoel"},"content":" if (dates.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"AlfredBeNoel"},"content":" addEvent(values[2], startDate, endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (Objects.equals(values[0], \"T\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"AlfredBeNoel"},"content":" addToDo(values[2]);","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"AlfredBeNoel"},"content":" } else if (Objects.equals(values[0], \"D\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"AlfredBeNoel"},"content":" if (values.length \u003d\u003d 4) {","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"AlfredBeNoel"},"content":" addDeadline(values[2], values[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid line! Skipping line...\");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"AlfredBeNoel"},"content":" if (Objects.equals(values[1], \"1\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"AlfredBeNoel"},"content":" this.taskList.get(this.taskList.size() - 1).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"No value in file\");","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"AlfredBeNoel"},"content":" public LocalDate dateFormat(String endDate) {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate date;","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter1 \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"AlfredBeNoel"},"content":" date \u003d LocalDate.parse(endDate, formatter1);","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"AlfredBeNoel"},"content":" return date;","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"AlfredBeNoel"},"content":" date \u003d LocalDate.parse(endDate, formatter2);","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"AlfredBeNoel"},"content":" return date;","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date format\");","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"AlfredBeNoel"},"content":" return null;","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"AlfredBeNoel"},"content":" public LocalTime timeFormat(String date) {","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime time \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter1 \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"AlfredBeNoel"},"content":" DateTimeFormatter formatter2 \u003d DateTimeFormatter.ofPattern(\"dd/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"AlfredBeNoel"},"content":" time \u003d LocalTime.parse(date, formatter1);","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"AlfredBeNoel"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"AlfredBeNoel"},"content":" time \u003d LocalTime.parse(date, formatter2);","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"AlfredBeNoel"},"content":" } catch (DateTimeParseException e2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid Time Format\");","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"AlfredBeNoel"},"content":" return time;","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"AlfredBeNoel"},"content":" public static void printFunction(String message){","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler + \"\\n\" + message + \"\\n\" + filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"AlfredBeNoel"},"content":" public void addEvent(String task, String startDate, String endDate) {","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate startDateFormat \u003d dateFormat(startDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate endDateFormat \u003d dateFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime startTimeFormat \u003d timeFormat(startDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime endTimeFormat \u003d timeFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"AlfredBeNoel"},"content":" if (startDateFormat \u003d\u003d null || endDateFormat \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid format for start/end date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"AlfredBeNoel"},"content":" if (startTimeFormat \u003d\u003d null || endTimeFormat \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid format for start/end time!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new Events(task, startDateFormat, startTimeFormat, endDateFormat, endTimeFormat);","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"AlfredBeNoel"},"content":" public void addDeadline(String task, String endDate) {","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"AlfredBeNoel"},"content":" LocalDate date \u003d dateFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"AlfredBeNoel"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"AlfredBeNoel"},"content":" LocalTime time \u003d timeFormat(endDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"AlfredBeNoel"},"content":" if (time \u003d\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Invalid date!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"AlfredBeNoel"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":180,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new Deadlines(task, date, time);","lastModifiedDate":"2023-09-04"},{"lineNumber":182,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"AlfredBeNoel"},"content":" public void addToDo(String task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":196,"author":{"gitId":"AlfredBeNoel"},"content":" Task taskToAdd \u003d new ToDos(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":197,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkFull()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Array is full!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":202,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.add(taskToAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"AlfredBeNoel"},"content":" String addedMessageEnd \u003d \"Now you have \" + taskList.size() + \" tasks in the list.\";","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"AlfredBeNoel"},"content":" String updateAdd \u003d addedMessageStart + \"\\n\" + taskToAdd + \"\\n\" + addedMessageEnd;","lastModifiedDate":"2023-09-04"},{"lineNumber":206,"author":{"gitId":"AlfredBeNoel"},"content":" printFunction(updateAdd);","lastModifiedDate":"2023-09-04"},{"lineNumber":207,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":208,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":209,"author":{"gitId":"AlfredBeNoel"},"content":" public void printTaskList(){","lastModifiedDate":"2023-09-04"},{"lineNumber":210,"author":{"gitId":"AlfredBeNoel"},"content":" if (checkEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"List is empty!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"AlfredBeNoel"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":215,"author":{"gitId":"AlfredBeNoel"},"content":" int maxLength \u003d taskList.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":216,"author":{"gitId":"AlfredBeNoel"},"content":" for (int i \u003d 0; i \u003c maxLength; i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(i + 1 + \". \" + taskList.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":218,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":219,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-09-04"},{"lineNumber":220,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":221,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":223,"author":{"gitId":"AlfredBeNoel"},"content":" public List\u003cString\u003e getTaskAsList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":224,"author":{"gitId":"AlfredBeNoel"},"content":" List\u003cString\u003e linesToAppend \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":225,"author":{"gitId":"AlfredBeNoel"},"content":" for (Task t:taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":226,"author":{"gitId":"AlfredBeNoel"},"content":" linesToAppend.add(t.toFileString());","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":228,"author":{"gitId":"AlfredBeNoel"},"content":" return linesToAppend.subList(0, linesToAppend.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":229,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"AlfredBeNoel"},"content":" public void markAsDone(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.get(index).markAsDone();","lastModifiedDate":"2023-09-04"},{"lineNumber":233,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":234,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":235,"author":{"gitId":"AlfredBeNoel"},"content":" public void unMark(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":236,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.get(index).unMark();","lastModifiedDate":"2023-09-04"},{"lineNumber":237,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":238,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":239,"author":{"gitId":"AlfredBeNoel"},"content":" public void remove(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":240,"author":{"gitId":"AlfredBeNoel"},"content":" taskList.remove(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":241,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":242,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":243,"author":{"gitId":"AlfredBeNoel"},"content":" public int size() {","lastModifiedDate":"2023-09-04"},{"lineNumber":244,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":245,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":246,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"AlfredBeNoel"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":248,"author":{"gitId":"AlfredBeNoel"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":249,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":250,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":250}},{"path":"src/main/java/noel/helper/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.helper;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"public class Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" Scanner input;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" public Ui() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" public String getNextLine() {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" return this.input.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(\"Error reading file!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"AlfredBeNoel":21}},{"path":"src/main/java/noel/tasks/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[D]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate dueDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime dueTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" public Deadlines(String taskName, LocalDate deadlineDate, LocalTime deadlineTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" this.dueDate \u003d deadlineDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" this.dueTime \u003d deadlineTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatDate() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":" return this.dueDate.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatTime() {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":" return this.dueTime.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" String taskDetails \u003d super.getTaskName() + \" | \" + formatDate() + \" \" + formatTime();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" return \"D | \" + super.getStatusNumber() + \" | \" + taskDetails;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString() + \" (by: \" + formatDate() + \" \" + formatTime() + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":37}},{"path":"src/main/java/noel/tasks/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"public class Events extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[E]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate startDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime startTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalDate endDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" protected LocalTime endTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" protected String dateString \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" public Events(String taskName, LocalDate startDate, LocalTime startTime, LocalDate endDate, LocalTime endTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" setDates(startDate, startTime, endDate, endTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" return date.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" public String formatTime(LocalTime time) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" return time.format(DateTimeFormatter.ofPattern(\"HH:mm\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":" public void setDates(LocalDate start, LocalTime startTime, LocalDate end, LocalTime endTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" this.startDate \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" this.endDate \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" String startDateTime \u003d formatDate(this.startDate) + \" \" + formatTime(this.startTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" String endDateTime \u003d formatDate(this.endDate) + \" \" + formatTime(this.endTime);","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" this.dateString \u003d \" (from: \" + startDateTime + \" to: \" + endDateTime + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":" return \"E | \" + super.getStatusNumber() + \" | \" + this.taskName + \" | \" + this.dateString;","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString() + this.dateString;","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":48}},{"path":"src/main/java/noel/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":" protected String taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public String getStatusNumber() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" return (isDone ? \"1\" : \"0\"); // mark done task with 1","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":" public String getTaskName() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AlfredBeNoel"},"content":" return this.taskName;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"AlfredBeNoel"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.taskName;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AlfredBeNoel"},"content":" return \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AlfredBeNoel"},"content":" private void markPrintHelper(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AlfredBeNoel"},"content":" String filler \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"AlfredBeNoel"},"content":" System.out.println(filler);","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"AlfredBeNoel"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"AlfredBeNoel"},"content":" markPrintHelper(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"AlfredBeNoel"},"content":" public void unMark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"AlfredBeNoel"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"AlfredBeNoel"},"content":" markPrintHelper(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"AlfredBeNoel":52}},{"path":"src/main/java/noel/tasks/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AlfredBeNoel"},"content":"package noel.tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"AlfredBeNoel"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AlfredBeNoel"},"content":" final String taskChar \u003d \"[T]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AlfredBeNoel"},"content":" public ToDos(String taskName) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AlfredBeNoel"},"content":" super(taskName);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AlfredBeNoel"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AlfredBeNoel"},"content":" return taskChar + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"AlfredBeNoel"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AlfredBeNoel"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AlfredBeNoel"},"content":" return \"T | \" + super.getStatusNumber() + \" | \" + super.getTaskName();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AlfredBeNoel"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AlfredBeNoel"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AlfredBeNoel"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AlfredBeNoel":21}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"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":"AlfredBeNoel"},"content":"java -classpath ../bin Noel \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":{"AlfredBeNoel":1,"-":37}}] diff --git a/AlfredBeNoel_ip_master/commits.json b/AlfredBeNoel_ip_master/commits.json index 521002ff..5b95ab1b 100644 --- a/AlfredBeNoel_ip_master/commits.json +++ b/AlfredBeNoel_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"AlfredBeNoel":[{"date":"2023-08-23","commitResults":[{"hash":"edacd588008044de8f242a546cc976ae66dcbd22","isMergeCommit":false,"messageTitle":"Level-0 modified: src/main/java/Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"283a7fa92cb2ee01699562fe02ab4fb2b67bce4a","isMergeCommit":false,"messageTitle":"Update Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}},{"hash":"3e5e9d54685054615b29d16e44f294ee67199dd5","isMergeCommit":false,"messageTitle":"Update Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":4}}},{"hash":"5af9f158ec6294c1daed500d69481b1d5eb4c413","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"Solution for Level-2\n","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":1}}},{"hash":"e0317ca436c0d17978ac493b52507c830037efde","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"7f69aa146458f6345ba83cbd5a220c34cd5b1512","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":39},"sh":{"insertions":1,"deletions":1}}},{"hash":"8abdfecdd8a6655e3412686b593e6905c0301fad","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":34}}}]},{"date":"2023-09-02","commitResults":[{"hash":"2c9a8fb6d5256a3abda9f305a04e6c1f9639b7cb","isMergeCommit":false,"messageTitle":"Add changes for Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"239cd4c3bb9ebedc9b50debc94ff1a221b545ea4","isMergeCommit":false,"messageTitle":"Add changes to java files for Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":9}}},{"hash":"940c2caf9194d5f6913619911f99c420260cee0b","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"7c541177c47266f563076a5c0eddf4b097c041d1","isMergeCommit":false,"messageTitle":"Add changes for Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":5},"java":{"insertions":149,"deletions":36}}}]}]},"authorFileTypeContributionMap":{"AlfredBeNoel":{"java":514,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":2}},"authorContributionVariance":{"AlfredBeNoel":7589.0537},"authorDisplayNameMap":{"AlfredBeNoel":"CS2103T-W15-3 ANTO.. BEN"}} +{"authorDailyContributionsMap":{"AlfredBeNoel":[{"date":"2023-08-23","commitResults":[{"hash":"edacd588008044de8f242a546cc976ae66dcbd22","isMergeCommit":false,"messageTitle":"Level-0 modified: src/main/java/Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"283a7fa92cb2ee01699562fe02ab4fb2b67bce4a","isMergeCommit":false,"messageTitle":"Update Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":7}}},{"hash":"3e5e9d54685054615b29d16e44f294ee67199dd5","isMergeCommit":false,"messageTitle":"Update Noel.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":4}}},{"hash":"5af9f158ec6294c1daed500d69481b1d5eb4c413","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"Solution for Level-2\n","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":1}}},{"hash":"e0317ca436c0d17978ac493b52507c830037efde","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"7f69aa146458f6345ba83cbd5a220c34cd5b1512","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":192,"deletions":39},"sh":{"insertions":1,"deletions":1}}},{"hash":"8abdfecdd8a6655e3412686b593e6905c0301fad","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":34}}}]},{"date":"2023-09-02","commitResults":[{"hash":"2c9a8fb6d5256a3abda9f305a04e6c1f9639b7cb","isMergeCommit":false,"messageTitle":"Add changes for Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0}}},{"hash":"239cd4c3bb9ebedc9b50debc94ff1a221b545ea4","isMergeCommit":false,"messageTitle":"Add changes to java files for Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":129,"deletions":9}}},{"hash":"940c2caf9194d5f6913619911f99c420260cee0b","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"7c541177c47266f563076a5c0eddf4b097c041d1","isMergeCommit":false,"messageTitle":"Add changes for Level-8","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":5},"java":{"insertions":149,"deletions":36}}},{"hash":"b16b8e433b774243c8668e018e1c78378758d99d","isMergeCommit":false,"messageTitle":"Change for A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":484,"deletions":369}}},{"hash":"9a77859c55ce69dbb171e9c64c1dc2a7dcf889bd","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":145,"deletions":110}}}]}]},"authorFileTypeContributionMap":{"AlfredBeNoel":{"java":667,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":4}},"authorContributionVariance":{"AlfredBeNoel":90762.54},"authorDisplayNameMap":{"AlfredBeNoel":"CS2103T-W15-3 ANTO.. BEN"}} diff --git a/B-enguin_ip_master/authorship.json b/B-enguin_ip_master/authorship.json index 0468622c..1b70b634 100644 --- a/B-enguin_ip_master/authorship.json +++ b/B-enguin_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"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":"B-enguin"},"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-25"},{"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":{"B-enguin":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":"B-enguin"},"content":" mainClass.set(\"duke.Launcher\")","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":{"B-enguin":1,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"1 todo b","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"0 todo a","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"1 deadline a /by 2023-08-26","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"0 deadline c /by 2023-09-03","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"0 event task /from 2023-08-26 /to 2023-08-27","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"0 todo abc","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"B-enguin":6}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.command.Parser;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" * The main duke class.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"public class Duke {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" private UI ui;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" private Storage storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" * Constructor for Duke class.","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" * @param savePath string of path to the savefile","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" public Duke(String savePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" this.storage \u003d new Storage(savePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" this.taskList \u003d this.storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" System.exit(0);","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" public void setUi(UI ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" public void getResponse(String rawUserInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" Command c \u003d Parser.parseCommand(rawUserInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" ui.sendError(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":46}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":" * Represents an Exception specific to Duke.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" public DukeException(String e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" super(e);","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"B-enguin":10}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.ui.GuiBridge;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"public class Launcher {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" Application.launch(GuiBridge.class, args);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":13}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import duke.command.Parser;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * Storage handler for duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"public class Storage {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" private final String savePath;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" private final boolean isUpdatable \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public Storage(String savePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" this.savePath \u003d savePath;","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" * Updates the savefile to the most current tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current list of tasks","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" public void updateFile(TaskList taskList, UI ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" if (isUpdatable) {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath, false);","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" for (Task t : taskList) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" writer.write(t.getSaveString() + \"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" ui.sendError(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * Loads a TaskList from the given savefile.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * @return a TaskList constructed from the savefile","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException when file is corrupted","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" public TaskList load() throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" File save \u003d new File(this.savePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" Scanner scanner \u003d new Scanner(save);","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" if (line.length() !\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" String[] s \u003d line.split(\" \", 2);","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" Command c \u003d Parser.parseCommand(s[1]);","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, this);","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" if (Integer.parseInt(s[0]) \u003d\u003d 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" taskList.get(taskList.size() - 1).markAsDone();","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" scanner.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" return taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" File save \u003d new File(this.savePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" save.createNewFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" return new TaskList();","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" } catch (IOException innerE) {","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" throw new Error(\"Cannot create save file\");","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":80}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" * Represents an exit command by the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"public class ByeCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"bye\";","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" Platform.exit();","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":20}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" * Represents a user command.","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"public interface Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" * Execute the given command.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if there is error running the command","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" void execute(TaskList taskList, UI ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":23}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" * Command to create a Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"public class DeadlineCommand extends NonemptyArgumentCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"deadline\";","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" * Constructor for a DeadlineCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments for the DeadlineCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" public DeadlineCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" * They must,","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" * 1. Be in the format [description] /by YYYY-MM-DD","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" * @param arguments argument to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException is argument is not valid","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" super.validate(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" String[] userArgs \u003d arguments.split(\"/by \");","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" if (userArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Missing Argument for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" + \", should include /by YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" if (Objects.equals(userArgs[1], \"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Missing Argument for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" + \", should include /by YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" LocalDate date \u003d LocalDate.parse(userArgs[1]);","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Invalid Date Format for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" + \", should be /by YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" * Creates a Deadline task.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if deadline task cannot be created","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" String[] userArgs \u003d arguments.split(\"/by \");","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" LocalDate date \u003d LocalDate.parse(userArgs[1]);","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" taskList.add(new Deadline(userArgs[0], date));","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":88}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" * Command to delete a Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"public class DeleteCommand extends NumberedChoiceCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"mark\";","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * Constructor for the DeleteCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments for DeleteCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" public DeleteCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" * Deletes a specified task.","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException when unable to delete","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" validate(taskList);","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Noted. I\u0027ve removed this task:\\n \"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" + taskList.get(choice)","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", taskList.size() - 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" taskList.remove(choice);","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" * They must be","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * 1. Numeric","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" * 2. A valid choice given current tasks","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" private void validate(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" super.validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" if (choice \u003c 0 || choice \u003e\u003d taskList.size()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Argument Provided out of range: \" + (choice + 1));","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":66}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" * Command to create an Event Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"public class EventCommand extends NonemptyArgumentCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"event\";","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" * Constructor for an EventCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments for EventCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" public EventCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * Validate arguments for this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" * They must,","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" * 1. Be in the format [description] /from YYYY-MM-DD /to YYYY-MM-DD","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" super.validate(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" String[] userArgs \u003d arguments.split(\"/from \");","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" if (userArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Missing Argument for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" + \", should include /from YYYY-MM-DD /to YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" String desc \u003d userArgs[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" String[] subcommandArgs \u003d userArgs[1].split(\"/to \");","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" if (subcommandArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Missing Argument for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" + \", should include /from YYYY-MM-DD /to YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" if (Objects.equals(subcommandArgs[0], \"\") || Objects.equals(subcommandArgs[1], \"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Missing Argument for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" + \", should include /from YYYY-MM-DD /to YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" LocalDate date \u003d LocalDate.parse(subcommandArgs[0].trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" date \u003d LocalDate.parse(subcommandArgs[1].trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Invalid Date Format for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" + \"should be /from YYYY-MM-DD /to YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" * Create an Event Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if unable to create event","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" String[] userArgs \u003d arguments.split(\"/from |/to \");","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" LocalDate from \u003d LocalDate.parse(userArgs[1].trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":" LocalDate to \u003d LocalDate.parse(userArgs[2].trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"B-enguin"},"content":" taskList.add(new Event(userArgs[0].trim(), from, to));","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"B-enguin"},"content":" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"B-enguin"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":96}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" * Command to find a Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"public class FindCommand extends NonemptyArgumentCommand implements Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"find\";","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private final String argument;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" public FindCommand(String argument) {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" this.argument \u003d argument;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" super.validate(arguments);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" if (taskList.get(i).getDescription().contains(argument)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" output.append(i + 1).append(\". \").append(taskList.get(i)).append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" if (output.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"No Items in List\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Here are the matching tasks in your list:\\n\" + output);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"B-enguin":39}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" * Command to list Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"list\";","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" private final String argument;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" * Constructor for ListCommand.","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" * @param argument arguments for ListCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" public ListCommand(String argument) {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" this.argument \u003d argument;","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" * They must have one of the following formats,","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * \u003cul\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist now\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist YYYY-MM-DD\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" * \u003c/ul\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" private void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" if (arguments !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" // Non null argument, check format","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" if (arguments.equals(\"now\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" return;","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" // User Specified Date, check date","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" LocalDate date \u003d LocalDate.parse(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" \"Invalid Date Format Provided, expected either:\\n\\tlist\\n\\tlist now\\n\\tlist YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" * List tasks depending on arguments.","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" * \u003cul\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist: list all tasks\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist now: list all tasks ending within 1 week from now\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist YYYY-MM-DD: list all task ending before specified date\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" * \u003c/ul\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if unable to list tasks","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" validate(this.argument);","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" LocalDate date;","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" if (this.argument !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" if (this.argument.equals(\"now\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" date \u003d LocalDate.now().plusWeeks(1L);","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" date \u003d LocalDate.parse(this.argument);","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" date \u003d LocalDate.MAX;","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"B-enguin"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"B-enguin"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"B-enguin"},"content":" if (taskList.get(i).isBefore(date)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"B-enguin"},"content":" output.append(i + 1).append(\". \").append(taskList.get(i)).append(\"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"B-enguin"},"content":" if (output.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"No Items in List\");","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"B-enguin"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(output.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":100}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" * Command to mark a Task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"public class MarkCommand extends NumberedChoiceCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"mark\";","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" * Constructor for MarkCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments for MarkCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" public MarkCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" * Mark a Task as done.","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if unable to mark task as done","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" validate(taskList);","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" taskList.get(choice).markAsDone();","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Nice! I\u0027ve marked this task as done:\\n \" + taskList.get(choice));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * They must be,","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" * 1. Numeric","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * 2. Valid Choice for the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" * @param taskList The current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" private void validate(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" super.validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" if (choice \u003c 0 || choice \u003e\u003d taskList.size()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Argument Provided out of range: \" + (choice + 1));","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":65}},{"path":"src/main/java/duke/command/NonemptyArgumentCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":" * Represents an argument with one or more non-empty arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" * In the structure [command] [args]","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"public abstract class NonemptyArgumentCommand {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(String.format(\"Missing Argument for NonemptyArgumentCommand: %s\", this));","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":23}},{"path":"src/main/java/duke/command/NumberedChoiceCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":" * Represents a command with a non-empty numerical argument.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" * Should be of the structure [command] [number], where number is a task id.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"public abstract class NumberedChoiceCommand extends NonemptyArgumentCommand {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" super.validate(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" int i \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Invalid Argument Provided, expected numeric argument: \" + arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":27}},{"path":"src/main/java/duke/command/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":" * Raw text handler for duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"public class Parser {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" * Parse the raw input from user","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" * @param rawCommand the raw input given by the user","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" * @return the command if it exists","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if no matching command is found","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" public static Command parseCommand(String rawCommand) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" // Clean Raw Input","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" rawCommand \u003d rawCommand.trim().replaceAll(\" +\", \" \");","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" // Read Command","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" String[] userInput \u003d rawCommand.split(\" \", 2);","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" String command \u003d userInput[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" String arguments \u003d userInput.length \u003d\u003d 2 ? userInput[1] : null;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" switch (command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" case \"bye\":","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" case \"list\":","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" return new ListCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" case \"mark\":","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" return new MarkCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" return new UnmarkCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" case \"delete\":","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" return new DeleteCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" case \"todo\":","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" return new TodoCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" return new DeadlineCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" case \"event\":","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" return new EventCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" default:","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Invalid Command: \" + command + \" , Please Try Again...\");","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":46}},{"path":"src/main/java/duke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" * Command to create a Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"public class TodoCommand extends NonemptyArgumentCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"todo\";","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" * Constructor for TodoCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments for TodoCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public TodoCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * They must not be empty","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" super.validate(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" * Create a Todo Task","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if unable to create Todo task","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" taskList.add(new Todo(this.arguments));","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":63}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" * Command to set a Task to not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"public class UnmarkCommand extends NumberedChoiceCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"unmark\";","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * Constructor for Unmark command","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to Unmark command","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" public UnmarkCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" * Mark a task as not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if unable to mark a task as not done","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" validate(taskList);","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" taskList.get(choice).markAsNotDone();","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"OK, I\u0027ve marked this task as not done yet:\\n \" + taskList.get(choice));","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" * Validate the arguments to this command","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" * They must be,","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * 1. Numeric","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" * 2. Valid choice for the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" private void validate(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" super.validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" if (choice \u003c 0 || choice \u003e\u003d taskList.size()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Argument Provided out of range: \" + (choice + 1));","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":64}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" * Represents a Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" * Constructor to Deadline Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * @param description description of task","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" * @param by date task is due","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" * Returns if task is before given date.","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" * @param date given date to check against","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * @return true if task is before given date, false otherwise","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" public boolean isBefore(LocalDate date) {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" return this.by.isBefore(date);","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" * Get string representation of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" * @return string representation of task","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * Get a string representing this event to save to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * @return string representing this event to save to file","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" public String getSaveString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" return String.format(\"%d deadline %s /by %s\", isDone ? 1 : 0, description.trim(), by);","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"B-enguin":55}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" * Represents an Event Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * Constructor to Event Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" * @param description description of task","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" * @param from task start date","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" * @param to task end date","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * Returns if task is before given date.","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" * @param date given date to check against","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * @return true if task is before given date, false otherwise","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" public boolean isBefore(LocalDate date) {","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" return this.to.isBefore(date);","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" * Get string representation of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" * @return string representation of task","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" super.toString(),","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")),","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" * Get a string representing this event to save to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" * @return string representing this event to save to file","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" public String getSaveString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" return String.format(\"%d event %s /from %s /to %s\", isDone ? 1 : 0, description.trim(), from, to);","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"B-enguin":62}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":" * Represents a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" protected String description;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" * Constructor for Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * @param description description of task","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" * String representing status of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" * @return string representing status of task","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" * Change task to done","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" * Change task to not done","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * Get a string representing this event to save to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * @return string representing this event to save to file","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" public String getSaveString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" return \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" * Returns a description of the event","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" * @return a string representing the description of the event","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" return description;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" * Returns if task is before given date.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" * @param date given date to check against","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" * @return true","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" public boolean isBefore(LocalDate date) {","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" return true;","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" * Get string representation of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" * @return string representation of task","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-19"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"B-enguin":82}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":" * Represents a task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":9}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":" * Represents a Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" public String getSaveString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" return String.format(\"%d todo %s\", isDone ? 1 : 0, description.trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"B-enguin":22}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" * DialogBox Controller.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" private Label dialog;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/duke/ui/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" private void flip() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" * Returns a User DialogBox.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" * @param text user text","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" * @param img user image","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" * @return a DialogBox formatted for the user text","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" * Returns a Duke DialogBox.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" * @param text duke message","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" * @param img duke image","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" * @return a DialogBox formatted for the duke text","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" db.setStyle(\"-fx-background-color: #E0E0E0\");","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" db.flip();","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" return db;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" * Overloaded function to return Duke DialogBox with Colored Text.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" * @param text duke message","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" * @param img duke image","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" * @param color text color","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" * @return a DialogBox formatted for the duke text with colored text","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"B-enguin"},"content":" public static DialogBox getDukeDialog(String text, Image img, String color) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"B-enguin"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"B-enguin"},"content":" db.setStyle(\"-fx-background-color: #E0E0E0\");","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"B-enguin"},"content":" db.dialog.setTextFill(Color.valueOf(color));","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"B-enguin"},"content":" db.flip();","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"B-enguin"},"content":" return db;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":90}},{"path":"src/main/java/duke/ui/GuiBridge.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"public class GuiBridge extends Application {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" private Duke duke \u003d new Duke(\"data/duke.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(GuiBridge.class.getResource(\"view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" UI ui \u003d new UI(fxmlLoader.\u003cMainWindow\u003egetController());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" duke.setUi(ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" stage.show();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":35}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" private Duke duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"images/user.png\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"images/bot.png\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" public void initialize() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" addDialog(DialogBox.getUserDialog(input, userImage));","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" duke.getResponse(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" userInput.clear();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" protected void addDialog(DialogBox ... dialogBox) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" dialogBox","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" public Image getDukeImage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" return dukeImage;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":61}},{"path":"src/main/java/duke/ui/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.ui;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":" * UI Handler for duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"public class UI {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" private final MainWindow mainWindow;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" private enum Colors {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" ERROR(\"#FF0000\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" NORMAL(\"#00B0B0\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private final String code;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" Colors(String c) {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" code \u003d c;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" return code;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" * Constructor for UI Class.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * @param mainWindow MainWindow instance to output to","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" public UI(MainWindow mainWindow) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" this.mainWindow \u003d mainWindow;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" sendMessage(\"Hello! I\u0027m Heimdallr\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" * Print a message to GUI.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" * @param msg The message to print","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" public void sendMessage(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" mainWindow.addDialog(DialogBox.getDukeDialog(msg, mainWindow.getDukeImage(), Colors.NORMAL.code));","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * Print an error to GUI.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * @param msg The error message to print","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" public void sendError(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" mainWindow.addDialog(DialogBox.getDukeDialog(msg, mainWindow.getDukeImage(), Colors.ERROR.code));","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":53}},{"path":"src/main/resources/duke/ui/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"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-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":16}},{"path":"src/main/resources/duke/ui/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"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-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"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-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"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-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"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-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":19}},{"path":"src/test/java/duke/command/DeadlineCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"public class DeadlineCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public void deadlineCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new DeadlineCommand(\"task /by 2023-08-26\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" assertEquals(\"[D][ ] task (by: Aug 26 2023)\", taskList.get(0).toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"0 deadline task /by 2023-08-26\");","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" public void withoutArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" public void missingArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"task\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" public void missingTimeArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"task /by\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" public void invalidTimeArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"task /by s\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" public void invalidTimeFormat_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"task /by 26-08-2023\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" public void invalidSubcommand_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"task /to 26-08-2023\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":78}},{"path":"src/test/java/duke/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" public void deleteCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" writer.write(\"0 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new DeleteCommand(\"1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"0 todo task1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" public void withoutArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" new DeleteCommand(\"\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" public void nonNumeric_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" new DeleteCommand(\"notNumber\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" public void invalidNumericNumber_throwsDukeException(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" writer.write(\"0 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" new DeleteCommand(\"3\").execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":70}},{"path":"src/test/java/duke/command/EventCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"public class EventCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public void eventCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new EventCommand(\"task /from 2023-08-26 /to 2023-08-27\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" assertEquals(\"[E][ ] task (from: Aug 26 2023 to: Aug 27 2023)\", taskList.get(0).toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"0 event task /from 2023-08-26 /to 2023-08-27\");","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" assertEquals(0, 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" public void withoutArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" public void missingArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"task\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" public void missingTimeArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"task /by\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" public void invalidTimeArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"task /by s\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" public void invalidTimeFormat_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"task /by 26-08-2023\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" public void invalidSubcommand_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"task /from 2023-08-26 /from 2023-08-26\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":78}},{"path":"src/test/java/duke/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public void markCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" writer.write(\"0 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new MarkCommand(\"1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" assertEquals(\"X\", taskList.get(0).getStatusIcon());","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"1 todo task\", \"0 todo task1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" public void withoutArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" new MarkCommand(\"\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" public void nonNumeric_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" new MarkCommand(\"notNumber\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" public void invalidNumericNumber_throwsDukeException(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" writer.write(\"0 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" new MarkCommand(\"3\").execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":69}},{"path":"src/test/java/duke/command/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" public void invalidCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" Parser.parseCommand(\"thisIsInvalid\");","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" public void byeReturnsByeCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"bye\") instanceof ByeCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" public void listReturnsListCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"list\") instanceof ListCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" public void markReturnsMarkCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"mark 1\") instanceof MarkCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" public void unmarkReturnUnmarkCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"unmark 1\") instanceof UnmarkCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" public void deleteReturnDeleteCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"delete 1\") instanceof DeleteCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" public void todoReturnTodoCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"todo\") instanceof TodoCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" public void deadlineReturnDeadlineCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"deadline\") instanceof DeadlineCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"B-enguin"},"content":" public void eventReturEventCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"event\") instanceof EventCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":91}},{"path":"src/test/java/duke/command/TodoCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"public class TodoCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public void todoCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new TodoCommand(\"task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" assertEquals(\"[T][ ] task\", taskList.get(0).toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"0 todo task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" public void missingArgument_throwsException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" new TodoCommand(null).execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":43}},{"path":"src/test/java/duke/command/UnmarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"public class UnmarkCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public void unmarkCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" writer.write(\"1 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new UnmarkCommand(\"1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" assertEquals(\" \", taskList.get(0).getStatusIcon());","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"0 todo task\", \"0 todo task1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" public void withoutArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" new UnmarkCommand(\"\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" public void nonNumeric_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" new UnmarkCommand(\"notNumber\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" public void invalidNumericNumber_throwsDukeException(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" writer.write(\"0 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" new UnmarkCommand(\"3\").execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":69}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"randomCommand","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"todo buy bread","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"event eat bread /from now /to later","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"deadline make bread /by later","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"mark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"unmark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"mark 4","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"B-enguin":13}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"java -classpath ..\\bin duke.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":{"B-enguin":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":"#dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-20"},{"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":{"B-enguin":1,"-":37}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"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":"B-enguin"},"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-25"},{"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":{"B-enguin":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":"B-enguin"},"content":" mainClass.set(\"duke.Launcher\")","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":{"B-enguin":1,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"1 todo b","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"0 todo a","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"1 deadline a /by 2023-08-26","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"0 deadline c /by 2023-09-03","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"0 event task /from 2023-08-26 /to 2023-08-27","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"0 todo abc","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"B-enguin":6}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.command.Parser;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" * The main duke class.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"public class Duke {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" private UI ui;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" private Storage storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" * Constructor for Duke class.","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" * @param savePath string of path to the savefile","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" public Duke(String savePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" this.storage \u003d new Storage(savePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" this.taskList \u003d this.storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" System.exit(0);","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" public void setUi(UI ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" public void getResponse(String rawUserInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" Command c \u003d Parser.parseCommand(rawUserInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" ui.sendError(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":46}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":" * Represents an Exception specific to Duke.","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" public DukeException(String e) {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" super(e);","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"B-enguin":10}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.ui.GuiBridge;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"public class Launcher {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" Application.launch(GuiBridge.class, args);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":13}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import duke.command.Command;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import duke.command.Parser;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * Storage handler for duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"public class Storage {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" private final String savePath;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" private final boolean isUpdatable \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public Storage(String savePath) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" this.savePath \u003d savePath;","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" * Updates the savefile to the most current tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current list of tasks","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" public void updateFile(TaskList taskList, UI ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" if (isUpdatable) {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath, false);","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" for (Task t : taskList) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" writer.write(t.getSaveString() + \"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" ui.sendError(e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * Loads a TaskList from the given savefile.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * @return a TaskList constructed from the savefile","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException when file is corrupted","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" public TaskList load() throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" File save \u003d new File(this.savePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" Scanner scanner \u003d new Scanner(save);","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" if (line.length() !\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" String[] s \u003d line.split(\" \", 2);","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" Command c \u003d Parser.parseCommand(s[1]);","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, this);","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" if (Integer.parseInt(s[0]) \u003d\u003d 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" taskList.get(taskList.size() - 1).markAsDone();","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" scanner.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" return taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" File save \u003d new File(this.savePath);","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" save.createNewFile();","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" return new TaskList();","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" } catch (IOException innerE) {","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" throw new Error(\"Cannot create save file\");","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":80}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" * Represents an exit command by the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"public class ByeCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"bye\";","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" Platform.exit();","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":20}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" * Represents a user command.","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"public interface Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" * Execute the given command.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if there is error running the command","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" void execute(TaskList taskList, UI ui, Storage storage) throws DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":23}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" * Command to create a Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"public class DeadlineCommand extends NonemptyArgumentCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"deadline\";","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" * Constructor for a DeadlineCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments for the DeadlineCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" public DeadlineCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" * They must,","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" * 1. Be in the format [description] /by YYYY-MM-DD","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" * @param arguments argument to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException is argument is not valid","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" super.validate(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" String[] userArgs \u003d arguments.split(\"/by \");","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" if (userArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Missing Argument for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" + \", should include /by YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" if (Objects.equals(userArgs[1], \"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Missing Argument for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" + \", should include /by YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" LocalDate date \u003d LocalDate.parse(userArgs[1]);","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Invalid Date Format for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" + \", should be /by YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" * Creates a Deadline task.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if deadline task cannot be created","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" String[] userArgs \u003d arguments.split(\"/by \");","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" LocalDate date \u003d LocalDate.parse(userArgs[1]);","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" taskList.add(new Deadline(userArgs[0], date));","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":88}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" * Command to delete a Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"public class DeleteCommand extends NumberedChoiceCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"mark\";","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * Constructor for the DeleteCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments for DeleteCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" public DeleteCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" * Deletes a specified task.","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException when unable to delete","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" validate(taskList);","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Noted. I\u0027ve removed this task:\\n \"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" + taskList.get(choice)","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", taskList.size() - 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" taskList.remove(choice);","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" * They must be","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * 1. Numeric","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" * 2. A valid choice given current tasks","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" private void validate(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" super.validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" if (choice \u003c 0 || choice \u003e\u003d taskList.size()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Argument Provided out of range: \" + (choice + 1));","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":66}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" * Command to create an Event Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"public class EventCommand extends NonemptyArgumentCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"event\";","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" * Constructor for an EventCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments for EventCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" public EventCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * Validate arguments for this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" * They must,","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" * 1. Be in the format [description] /from YYYY-MM-DD /to YYYY-MM-DD","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" super.validate(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" String[] userArgs \u003d arguments.split(\"/from \");","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" if (userArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Missing Argument for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" + \", should include /from YYYY-MM-DD /to YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" String desc \u003d userArgs[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" String[] subcommandArgs \u003d userArgs[1].split(\"/to \");","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" if (subcommandArgs.length !\u003d 2) {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Missing Argument for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" + \", should include /from YYYY-MM-DD /to YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" if (Objects.equals(subcommandArgs[0], \"\") || Objects.equals(subcommandArgs[1], \"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Missing Argument for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" + \", should include /from YYYY-MM-DD /to YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" LocalDate date \u003d LocalDate.parse(subcommandArgs[0].trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" date \u003d LocalDate.parse(subcommandArgs[1].trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Invalid Date Format for command: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" + commandString","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" + \"should be /from YYYY-MM-DD /to YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" * Create an Event Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if unable to create event","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" String[] userArgs \u003d arguments.split(\"/from |/to \");","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" LocalDate from \u003d LocalDate.parse(userArgs[1].trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":" LocalDate to \u003d LocalDate.parse(userArgs[2].trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"B-enguin"},"content":" taskList.add(new Event(userArgs[0].trim(), from, to));","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"B-enguin"},"content":" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"B-enguin"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":96}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" * Command to find a Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"public class FindCommand extends NonemptyArgumentCommand implements Command {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"find\";","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private final String argument;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" public FindCommand(String argument) {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" this.argument \u003d argument;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" super.validate(arguments);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" if (taskList.get(i).getDescription().contains(argument)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" output.append(i + 1).append(\". \").append(taskList.get(i)).append(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" if (output.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"No Items in List\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Here are the matching tasks in your list:\\n\" + output);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"B-enguin":39}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" * Command to list Tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"list\";","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" private final String argument;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" * Constructor for ListCommand.","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" * @param argument arguments for ListCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" public ListCommand(String argument) {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" this.argument \u003d argument;","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" * They must have one of the following formats,","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * \u003cul\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist now\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist YYYY-MM-DD\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" * \u003c/ul\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" private void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" if (arguments !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" // Non null argument, check format","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" if (arguments.equals(\"now\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" return;","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" // User Specified Date, check date","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" LocalDate date \u003d LocalDate.parse(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" \"Invalid Date Format Provided, expected either:\\n\\tlist\\n\\tlist now\\n\\tlist YYYY-MM-DD\");","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" * List tasks depending on arguments.","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" * \u003cul\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist: list all tasks\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist now: list all tasks ending within 1 week from now\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" * \u003cli\u003elist YYYY-MM-DD: list all task ending before specified date\u003c/li\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" * \u003c/ul\u003e","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if unable to list tasks","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" validate(this.argument);","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" LocalDate date;","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" if (this.argument !\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" if (this.argument.equals(\"now\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" date \u003d LocalDate.now().plusWeeks(1L);","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" date \u003d LocalDate.parse(this.argument);","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" date \u003d LocalDate.MAX;","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"B-enguin"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"B-enguin"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"B-enguin"},"content":" if (taskList.get(i).isBefore(date)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"B-enguin"},"content":" output.append(i + 1).append(\". \").append(taskList.get(i)).append(\"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"B-enguin"},"content":" if (output.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"No Items in List\");","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"B-enguin"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(output.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":100}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" * Command to mark a Task as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"public class MarkCommand extends NumberedChoiceCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"mark\";","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" * Constructor for MarkCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments for MarkCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" public MarkCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" * Mark a Task as done.","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if unable to mark task as done","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" validate(taskList);","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" taskList.get(choice).markAsDone();","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Nice! I\u0027ve marked this task as done:\\n \" + taskList.get(choice));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * They must be,","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" * 1. Numeric","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * 2. Valid Choice for the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" * @param taskList The current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" private void validate(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" super.validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" if (choice \u003c 0 || choice \u003e\u003d taskList.size()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Argument Provided out of range: \" + (choice + 1));","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":65}},{"path":"src/main/java/duke/command/NonemptyArgumentCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":" * Represents an argument with one or more non-empty arguments.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" * In the structure [command] [args]","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"public abstract class NonemptyArgumentCommand {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(String.format(\"Missing Argument for NonemptyArgumentCommand: %s\", this));","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":23}},{"path":"src/main/java/duke/command/NumberedChoiceCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":" * Represents a command with a non-empty numerical argument.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" * Should be of the structure [command] [number], where number is a task id.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"public abstract class NumberedChoiceCommand extends NonemptyArgumentCommand {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" super.validate(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" int i \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Invalid Argument Provided, expected numeric argument: \" + arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":27}},{"path":"src/main/java/duke/command/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":" * Raw text handler for duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"public class Parser {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" * Parse the raw input from user","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" * @param rawCommand the raw input given by the user","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" * @return the command if it exists","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if no matching command is found","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" public static Command parseCommand(String rawCommand) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" // Clean Raw Input","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" rawCommand \u003d rawCommand.trim().replaceAll(\" +\", \" \");","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" // Read Command","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" String[] userInput \u003d rawCommand.split(\" \", 2);","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" String command \u003d userInput[0];","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" String arguments \u003d userInput.length \u003d\u003d 2 ? userInput[1] : null;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" switch (command) {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" case \"bye\":","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" return new ByeCommand();","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" case \"list\":","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" return new ListCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" case \"mark\":","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" return new MarkCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" return new UnmarkCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" case \"delete\":","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" return new DeleteCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" case \"todo\":","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" return new TodoCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" return new DeadlineCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" case \"event\":","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" return new EventCommand(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" default:","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Invalid Command: \" + command + \" , Please Try Again...\");","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":46}},{"path":"src/main/java/duke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" * Command to create a Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"public class TodoCommand extends NonemptyArgumentCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"todo\";","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" * Constructor for TodoCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments for TodoCommand","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public TodoCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * Validate arguments to this command.","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * They must not be empty","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to validate","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" protected void validate(String arguments) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" super.validate(arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" * Create a Todo Task","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if unable to create Todo task","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" taskList.add(new Todo(this.arguments));","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"Got it. I\u0027ve added this task:\\n \"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" + taskList.get(taskList.size() - 1)","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":63}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import duke.ui.UI;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" * Command to set a Task to not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"public class UnmarkCommand extends NumberedChoiceCommand implements Command {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" private static final String commandString \u003d \"unmark\";","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" private final String arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * Constructor for Unmark command","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" * @param arguments arguments to Unmark command","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" public UnmarkCommand(String arguments) {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" * Mark a task as not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * @param ui the UI tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * @param storage the Storage tied to the program","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if unable to mark a task as not done","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" public void execute(TaskList taskList, UI ui, Storage storage) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" validate(taskList);","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" taskList.get(choice).markAsNotDone();","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" if (ui !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" ui.sendMessage(\"OK, I\u0027ve marked this task as not done yet:\\n \" + taskList.get(choice));","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" storage.updateFile(taskList, ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" * Validate the arguments to this command","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" * They must be,","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * 1. Numeric","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" * 2. Valid choice for the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" * @param taskList the current TaskList","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" * @throws DukeException if arguments are invalid","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" private void validate(TaskList taskList) throws DukeException {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" super.validate(this.arguments);","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" int choice \u003d Integer.parseInt(arguments) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" if (choice \u003c 0 || choice \u003e\u003d taskList.size()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" throw new DukeException(\"Argument Provided out of range: \" + (choice + 1));","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" return commandString;","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":64}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" * Represents a Deadline Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" * Constructor to Deadline Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" * @param description description of task","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" * @param by date task is due","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" * Returns if task is before given date.","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" * @param date given date to check against","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * @return true if task is before given date, false otherwise","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" public boolean isBefore(LocalDate date) {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" return this.by.isBefore(date);","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" * Get string representation of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" * @return string representation of task","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" return \"[D]\" + super.toString() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")) + \")\";","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * Get a string representing this event to save to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * @return string representing this event to save to file","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" public String getSaveString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" return String.format(\"%d deadline %s /by %s\", isDone ? 1 : 0, description.trim(), by);","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"B-enguin":55}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" * Represents an Event Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" protected LocalDate from;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" protected LocalDate to;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * Constructor to Event Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" * @param description description of task","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" * @param from task start date","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" * @param to task end date","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" public Event(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" * Returns if task is before given date.","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" * @param date given date to check against","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" * @return true if task is before given date, false otherwise","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" public boolean isBefore(LocalDate date) {","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" return this.to.isBefore(date);","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" * Get string representation of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" * @return string representation of task","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" super.toString(),","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")),","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" * Get a string representing this event to save to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" * @return string representing this event to save to file","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" public String getSaveString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" return String.format(\"%d event %s /from %s /to %s\", isDone ? 1 : 0, description.trim(), from, to);","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"B-enguin":62}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":" * Represents a task.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" protected String description;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" * Constructor for Task.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" * @param description description of task","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" * String representing status of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" * @return string representing status of task","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" * Change task to done","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" * Change task to not done","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * Get a string representing this event to save to file.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * @return string representing this event to save to file","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" public String getSaveString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" return \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" * Returns a description of the event","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" * @return a string representing the description of the event","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" return description;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" * Returns if task is before given date.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" * @param date given date to check against","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" * @return true","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" public boolean isBefore(LocalDate date) {","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" return true;","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" * Get string representation of task.","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" * @return string representation of task","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-19"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"B-enguin":82}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":" * Represents a task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"public class TaskList extends ArrayList\u003cTask\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":9}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":" * Represents a Todo Task.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" public String getSaveString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" return String.format(\"%d todo %s\", isDone ? 1 : 0, description.trim());","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"B-enguin":22}},{"path":"src/main/java/duke/ui/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.paint.Color;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" * DialogBox Controller.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" private Label dialog;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/duke/ui/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" private void flip() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" * Returns a User DialogBox.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" * @param text user text","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" * @param img user image","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" * @return a DialogBox formatted for the user text","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" * Returns a Duke DialogBox.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" * @param text duke message","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" * @param img duke image","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" * @return a DialogBox formatted for the duke text","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" db.setStyle(\"-fx-background-color: #E0E0E0\");","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" db.flip();","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" return db;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" * Overloaded function to return Duke DialogBox with Colored Text.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" * @param text duke message","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" * @param img duke image","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" * @param color text color","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" * @return a DialogBox formatted for the duke text with colored text","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"B-enguin"},"content":" public static DialogBox getDukeDialog(String text, Image img, String color) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"B-enguin"},"content":" DialogBox db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"B-enguin"},"content":" db.setStyle(\"-fx-background-color: #E0E0E0\");","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"B-enguin"},"content":" db.dialog.setTextFill(Color.valueOf(color));","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"B-enguin"},"content":" db.flip();","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"B-enguin"},"content":" return db;","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":90}},{"path":"src/main/java/duke/ui/GuiBridge.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"public class GuiBridge extends Application {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" private Duke duke \u003d new Duke(\"data/duke.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(GuiBridge.class.getResource(\"view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" UI ui \u003d new UI(fxmlLoader.\u003cMainWindow\u003egetController());","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" duke.setUi(ui);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" stage.show();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":35}},{"path":"src/main/java/duke/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import duke.Duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" private Duke duke;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"images/user.png\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"images/bot.png\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" public void initialize() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" * Creates two dialog boxes, one echoing user input and the other containing Duke\u0027s reply and then appends them to","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" addDialog(DialogBox.getUserDialog(input, userImage));","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" duke.getResponse(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" userInput.clear();","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" @FXML","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" protected void addDialog(DialogBox ... dialogBox) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" dialogBox","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" );","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" public Image getDukeImage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" return dukeImage;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":61}},{"path":"src/main/java/duke/ui/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.ui;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":" * UI Handler for duke application.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"public class UI {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":" private final MainWindow mainWindow;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" private enum Colors {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" ERROR(\"#FF0000\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" NORMAL(\"#00B0B0\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" private final String code;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" Colors(String c) {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" code \u003d c;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" return code;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" * Constructor for UI Class.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" * @param mainWindow MainWindow instance to output to","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" public UI(MainWindow mainWindow) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" this.mainWindow \u003d mainWindow;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" sendMessage(\"Hello! I\u0027m Heimdallr\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" * Print a message to GUI.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" * @param msg The message to print","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" public void sendMessage(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" mainWindow.addDialog(DialogBox.getDukeDialog(msg, mainWindow.getDukeImage(), Colors.NORMAL.code));","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" * Print a message to GUI.","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" * @param msg The message to print","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" public void sendMessage(String ... msg) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" for (String m: msg) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" stringBuilder.append(m + \"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" mainWindow.addDialog(","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" DialogBox.getDukeDialog(stringBuilder.toString(), mainWindow.getDukeImage(), Colors.NORMAL.code));","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" * Print an error to GUI.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" * @param msg The error message to print","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" public void sendError(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" mainWindow.addDialog(DialogBox.getDukeDialog(msg, mainWindow.getDukeImage(), Colors.ERROR.code));","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":67}},{"path":"src/main/resources/duke/ui/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"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-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"99.0\" fitWidth\u003d\"99.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":16}},{"path":"src/main/resources/duke/ui/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"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-01"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"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-01"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"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-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"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-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" prefHeight\u003d\"552.0\" prefWidth\u003d\"388.0\" /\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"B-enguin":19}},{"path":"src/test/java/duke/command/DeadlineCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"public class DeadlineCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public void deadlineCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new DeadlineCommand(\"task /by 2023-08-26\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" assertEquals(\"[D][ ] task (by: Aug 26 2023)\", taskList.get(0).toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"0 deadline task /by 2023-08-26\");","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" public void withoutArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" public void missingArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"task\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" public void missingTimeArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"task /by\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" public void invalidTimeArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"task /by s\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" public void invalidTimeFormat_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"task /by 26-08-2023\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" public void invalidSubcommand_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" new DeadlineCommand(\"task /to 26-08-2023\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":78}},{"path":"src/test/java/duke/command/DeleteCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"public class DeleteCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" public void deleteCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" writer.write(\"0 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new DeleteCommand(\"1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" assertEquals(1, taskList.size());","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"0 todo task1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" public void withoutArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" new DeleteCommand(\"\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" public void nonNumeric_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" new DeleteCommand(\"notNumber\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" public void invalidNumericNumber_throwsDukeException(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" writer.write(\"0 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" new DeleteCommand(\"3\").execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":70}},{"path":"src/test/java/duke/command/EventCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"public class EventCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public void eventCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new EventCommand(\"task /from 2023-08-26 /to 2023-08-27\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" assertEquals(\"[E][ ] task (from: Aug 26 2023 to: Aug 27 2023)\", taskList.get(0).toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"0 event task /from 2023-08-26 /to 2023-08-27\");","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" assertEquals(0, 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" public void withoutArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" public void missingArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"task\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" public void missingTimeArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"task /by\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" public void invalidTimeArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"task /by s\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" public void invalidTimeFormat_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"task /by 26-08-2023\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":" public void invalidSubcommand_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" new EventCommand(\"task /from 2023-08-26 /from 2023-08-26\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":78}},{"path":"src/test/java/duke/command/MarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"public class MarkCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public void markCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" writer.write(\"0 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new MarkCommand(\"1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" assertEquals(\"X\", taskList.get(0).getStatusIcon());","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"1 todo task\", \"0 todo task1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" public void withoutArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" new MarkCommand(\"\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" public void nonNumeric_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" new MarkCommand(\"notNumber\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" public void invalidNumericNumber_throwsDukeException(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" writer.write(\"0 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" new MarkCommand(\"3\").execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":69}},{"path":"src/test/java/duke/command/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":" public void invalidCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":" Parser.parseCommand(\"thisIsInvalid\");","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":" public void byeReturnsByeCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"bye\") instanceof ByeCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" public void listReturnsListCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"list\") instanceof ListCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" public void markReturnsMarkCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"mark 1\") instanceof MarkCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" public void unmarkReturnUnmarkCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"unmark 1\") instanceof UnmarkCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" public void deleteReturnDeleteCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"delete 1\") instanceof DeleteCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" public void todoReturnTodoCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"todo\") instanceof TodoCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"B-enguin"},"content":" public void deadlineReturnDeadlineCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"deadline\") instanceof DeadlineCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"B-enguin"},"content":" public void eventReturEventCommand() {","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"B-enguin"},"content":" assertTrue(Parser.parseCommand(\"event\") instanceof EventCommand);","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":91}},{"path":"src/test/java/duke/command/TodoCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"public class TodoCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public void todoCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new TodoCommand(\"task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" assertEquals(\"[T][ ] task\", taskList.get(0).toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"0 todo task\");","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" public void missingArgument_throwsException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" new TodoCommand(null).execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":43}},{"path":"src/test/java/duke/command/UnmarkCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"package duke.command;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertLinesMatch;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"import java.util.List;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"B-enguin"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"B-enguin"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"B-enguin"},"content":"import duke.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"B-enguin"},"content":"public class UnmarkCommandTest {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"B-enguin"},"content":" public void unmarkCorrect(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"B-enguin"},"content":" writer.write(\"1 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"B-enguin"},"content":" Command c \u003d new UnmarkCommand(\"1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"B-enguin"},"content":" c.execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"B-enguin"},"content":" assertEquals(\" \", taskList.get(0).getStatusIcon());","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"B-enguin"},"content":" List\u003cString\u003e lines \u003d List.of(\"0 todo task\", \"0 todo task1\");","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"B-enguin"},"content":" assertLinesMatch(lines, Files.readAllLines(savePath.resolve(\"duke.txt\")));","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"B-enguin"},"content":" public void withoutArgument_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"B-enguin"},"content":" new UnmarkCommand(\"\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"B-enguin"},"content":" public void nonNumeric_throwsDukeException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"B-enguin"},"content":" new UnmarkCommand(\"notNumber\").execute(null, null, null);","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"B-enguin"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"B-enguin"},"content":" @Test","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"B-enguin"},"content":" public void invalidNumericNumber_throwsDukeException(@TempDir Path savePath) throws IOException {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"B-enguin"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"B-enguin"},"content":" Storage storage \u003d new Storage(savePath.resolve(\"duke.txt\").toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"B-enguin"},"content":" FileWriter writer \u003d new FileWriter(savePath.resolve(\"duke.txt\").toString(), false);","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"B-enguin"},"content":" writer.write(\"0 todo task\\n0 todo task1\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"B-enguin"},"content":" writer.close();","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"B-enguin"},"content":" TaskList taskList \u003d storage.load();","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"B-enguin"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"B-enguin"},"content":" new UnmarkCommand(\"3\").execute(taskList, null, storage);","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"B-enguin"},"content":" });","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"B-enguin"},"content":" } catch (DukeException ignored) {","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"B-enguin"},"content":" // Do Nothing","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"B-enguin"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"B-enguin"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"B-enguin":69}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"B-enguin"},"content":"randomCommand","lastModifiedDate":"2023-08-20"},{"lineNumber":2,"author":{"gitId":"B-enguin"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":3,"author":{"gitId":"B-enguin"},"content":"todo buy bread","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"B-enguin"},"content":"event eat bread /from now /to later","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"B-enguin"},"content":"deadline make bread /by later","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"B-enguin"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"B-enguin"},"content":"mark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"B-enguin"},"content":"mark 3","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"B-enguin"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"B-enguin"},"content":"unmark 1","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"B-enguin"},"content":"list","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"B-enguin"},"content":"mark 4","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"B-enguin"},"content":"bye","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"B-enguin":13}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"B-enguin"},"content":"java -classpath ..\\bin duke.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":{"B-enguin":1,"-":20}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"java -classpath ../bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"B-enguin"},"content":"#dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2023-08-20"},{"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":{"B-enguin":1,"-":37}}] diff --git a/B-enguin_ip_master/commits.json b/B-enguin_ip_master/commits.json index 88177618..4da28d36 100644 --- a/B-enguin_ip_master/commits.json +++ b/B-enguin_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"B-enguin":[{"date":"2023-08-19","commitResults":[{"hash":"a603492d9166ad1e6f0b1d5213bc9f98beb32d0e","isMergeCommit":false,"messageTitle":"Implemented Level-0 Requirements","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"94c70140eaddd43f2742ce09bf68467b54d93844","isMergeCommit":false,"messageTitle":"Implemented Level-1 Requirements","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"92e269c766f813ed0f899f6782067426c920a8b0","isMergeCommit":false,"messageTitle":"Implemented Level-2 Requirements","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"864fac5977e54c6cf81050fbfd1bd217bb9b2b31","isMergeCommit":false,"messageTitle":"Implemented Level-3, A-Classes Requirements","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":2}}},{"hash":"c7f5bc781c2333bd0107835edb0a7f7b2583e185","isMergeCommit":false,"messageTitle":"Implemented Level-4, A-Inheritance Requirements","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":31}}}]},{"date":"2023-08-20","commitResults":[{"hash":"acfefc15b8f06bf439f2bedf7d2a755bc7332121","isMergeCommit":false,"messageTitle":"Implemented A-TextUiTesting Requirements","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":7,"deletions":3},"sh":{"insertions":1,"deletions":1}}},{"hash":"387e67973b1d90c03e5975225762c0891ac94ae5","isMergeCommit":false,"messageTitle":"Implemented Level-5, A-Exceptions Requirements","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":62}}},{"hash":"187c1d7a0b9f7661b346ca71930f732bd6bc202a","isMergeCommit":false,"messageTitle":"Implemented Level-6, A-Collections Requirements","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":24}}},{"hash":"10402b37b3d396ba29b67382f018506c3ad62545","isMergeCommit":false,"messageTitle":"Implemented A-Enums Requirements","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":2}}}]},{"date":"2023-08-25","commitResults":[{"hash":"4f65672552935a08c7c90215f6c1f35201e1ead4","isMergeCommit":false,"messageTitle":"Refactor for A-MoreOOP, A-Packages. Added requirements for Level-7","messageBody":"","tags":["Level-7","A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":640,"deletions":199},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"a8e5ae6104c59a8ce190a1c61361cad02b2cae90","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"736953cbdfb6a2549253c1e2bebe1c84259dac31","isMergeCommit":false,"messageTitle":"Added Tracking for save data","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"c0bbf458c48270f28d945a3d55c775064f3e2aaa","isMergeCommit":false,"messageTitle":"Implemented Level-8 Requirements","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":100,"deletions":18}}},{"hash":"9fc8adacbff01a9574a6a103903badfd1363ab1a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5a545abf343177df643ea7de44e5af7b37d338b3","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"c245787f42051f13070d90eef92a049086d40f7d","isMergeCommit":false,"messageTitle":"Fix build.gradle for project structure","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"b30385829ea56f5ae2734e235d02a0cea6c68f63","isMergeCommit":false,"messageTitle":"Add A-JUnit requirements","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":520,"deletions":11}}},{"hash":"2395d27320f66afa7b183112a712fcb7a1956b37","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"966df7180ea6b34a38a2883ece4fcfe8a975b11b","isMergeCommit":false,"messageTitle":"Add Javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":334,"deletions":4}}},{"hash":"0989a3e492251f77f9c202c2319a52c26fe876be","isMergeCommit":false,"messageTitle":"Add A-CodingStandard Requirements","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":82}}},{"hash":"e2d27c50b2a3aac202ce225448baec216d409388","isMergeCommit":false,"messageTitle":"Add Level-9 Requirements","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":45}}},{"hash":"fdd1bfe60474d6cbc06507e629256551853fc40b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"18427960fe60ee395f2eb814331405c3689e7ea0","isMergeCommit":true,"messageTitle":"Add Level-9 Requirements","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"fb715cb21eaa21f741fe229359972cc7b116970a","isMergeCommit":false,"messageTitle":"Fix missing getDescription from Task","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"14486907201708a3603bb192960ee6092680c8b6","isMergeCommit":false,"messageTitle":"Modify project to follow checkstyle.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":216,"deletions":126}}},{"hash":"bccf06c22dcc29f1bdba4ee2d391deacf485d552","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Checkstyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"09a153438e278578573cf6661988e6fa0795edb4","isMergeCommit":false,"messageTitle":"Add support for GUI.","messageBody":"Initial files required for GUI added\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":162,"deletions":0}}},{"hash":"ad2ae23670e6ec1580f7b97ae5309d0da1ecd4f2","isMergeCommit":false,"messageTitle":"Replace interface with GUI.","messageBody":"Partially migrated to using GUI over text-based interface, in partial fulfilment of Level-10 requirements.\nRemoved isExit() from all classes which inherit Command.java\n","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":210}}},{"hash":"9c4142ffbd8fd600fe417bbe8d540b63d800f939","isMergeCommit":false,"messageTitle":"Add Level-10 Requirements.","messageBody":"Full migration to GUI.\n","tags":["Level-10","A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":11}}},{"hash":"7bc37e0618e3776ea7dc1b8fb798062852f1a6d2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"B-enguin":{"java":1836,"md":2,"fxml":35,"sh":1,"bat":1,"gradle":1,"txt":19}},"authorContributionVariance":{"B-enguin":183342.06},"authorDisplayNameMap":{"B-enguin":"CS2103T-T13-3 BENJ.. HUI"}} +{"authorDailyContributionsMap":{"B-enguin":[{"date":"2023-08-19","commitResults":[{"hash":"a603492d9166ad1e6f0b1d5213bc9f98beb32d0e","isMergeCommit":false,"messageTitle":"Implemented Level-0 Requirements","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":6}}},{"hash":"94c70140eaddd43f2742ce09bf68467b54d93844","isMergeCommit":false,"messageTitle":"Implemented Level-1 Requirements","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"92e269c766f813ed0f899f6782067426c920a8b0","isMergeCommit":false,"messageTitle":"Implemented Level-2 Requirements","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"864fac5977e54c6cf81050fbfd1bd217bb9b2b31","isMergeCommit":false,"messageTitle":"Implemented Level-3, A-Classes Requirements","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":2}}},{"hash":"c7f5bc781c2333bd0107835edb0a7f7b2583e185","isMergeCommit":false,"messageTitle":"Implemented Level-4, A-Inheritance Requirements","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":108,"deletions":31}}}]},{"date":"2023-08-20","commitResults":[{"hash":"acfefc15b8f06bf439f2bedf7d2a755bc7332121","isMergeCommit":false,"messageTitle":"Implemented A-TextUiTesting Requirements","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":7,"deletions":3},"sh":{"insertions":1,"deletions":1}}},{"hash":"387e67973b1d90c03e5975225762c0891ac94ae5","isMergeCommit":false,"messageTitle":"Implemented Level-5, A-Exceptions Requirements","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":62}}},{"hash":"187c1d7a0b9f7661b346ca71930f732bd6bc202a","isMergeCommit":false,"messageTitle":"Implemented Level-6, A-Collections Requirements","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":24}}},{"hash":"10402b37b3d396ba29b67382f018506c3ad62545","isMergeCommit":false,"messageTitle":"Implemented A-Enums Requirements","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":2}}}]},{"date":"2023-08-25","commitResults":[{"hash":"4f65672552935a08c7c90215f6c1f35201e1ead4","isMergeCommit":false,"messageTitle":"Refactor for A-MoreOOP, A-Packages. Added requirements for Level-7","messageBody":"","tags":["Level-7","A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":640,"deletions":199},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"a8e5ae6104c59a8ce190a1c61361cad02b2cae90","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"736953cbdfb6a2549253c1e2bebe1c84259dac31","isMergeCommit":false,"messageTitle":"Added Tracking for save data","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}},{"hash":"c0bbf458c48270f28d945a3d55c775064f3e2aaa","isMergeCommit":false,"messageTitle":"Implemented Level-8 Requirements","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":100,"deletions":18}}},{"hash":"9fc8adacbff01a9574a6a103903badfd1363ab1a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5a545abf343177df643ea7de44e5af7b37d338b3","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"c245787f42051f13070d90eef92a049086d40f7d","isMergeCommit":false,"messageTitle":"Fix build.gradle for project structure","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"b30385829ea56f5ae2734e235d02a0cea6c68f63","isMergeCommit":false,"messageTitle":"Add A-JUnit requirements","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":520,"deletions":11}}},{"hash":"2395d27320f66afa7b183112a712fcb7a1956b37","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-26","commitResults":[{"hash":"966df7180ea6b34a38a2883ece4fcfe8a975b11b","isMergeCommit":false,"messageTitle":"Add Javadocs","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":334,"deletions":4}}},{"hash":"0989a3e492251f77f9c202c2319a52c26fe876be","isMergeCommit":false,"messageTitle":"Add A-CodingStandard Requirements","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":82}}},{"hash":"e2d27c50b2a3aac202ce225448baec216d409388","isMergeCommit":false,"messageTitle":"Add Level-9 Requirements","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":92,"deletions":45}}},{"hash":"fdd1bfe60474d6cbc06507e629256551853fc40b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"18427960fe60ee395f2eb814331405c3689e7ea0","isMergeCommit":true,"messageTitle":"Add Level-9 Requirements","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-29","commitResults":[{"hash":"fb715cb21eaa21f741fe229359972cc7b116970a","isMergeCommit":false,"messageTitle":"Fix missing getDescription from Task","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"14486907201708a3603bb192960ee6092680c8b6","isMergeCommit":false,"messageTitle":"Modify project to follow checkstyle.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":216,"deletions":126}}},{"hash":"bccf06c22dcc29f1bdba4ee2d391deacf485d552","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Checkstyle\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"09a153438e278578573cf6661988e6fa0795edb4","isMergeCommit":false,"messageTitle":"Add support for GUI.","messageBody":"Initial files required for GUI added\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"fxml":{"insertions":35,"deletions":0},"java":{"insertions":162,"deletions":0}}},{"hash":"ad2ae23670e6ec1580f7b97ae5309d0da1ecd4f2","isMergeCommit":false,"messageTitle":"Replace interface with GUI.","messageBody":"Partially migrated to using GUI over text-based interface, in partial fulfilment of Level-10 requirements.\nRemoved isExit() from all classes which inherit Command.java\n","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":210}}},{"hash":"9c4142ffbd8fd600fe417bbe8d540b63d800f939","isMergeCommit":false,"messageTitle":"Add Level-10 Requirements.","messageBody":"Full migration to GUI.\n","tags":["Level-10","A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":11}}},{"hash":"7bc37e0618e3776ea7dc1b8fb798062852f1a6d2","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"53cf0418b58a5321cc8bbc40549c9c4e3d0fe3c8","isMergeCommit":false,"messageTitle":"Add support for varargs message in UI.","messageBody":"Allow UI sendMessage() method to accept varargs.\n","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"27ba75346c775e6dd01ef78d5389374cd6c9cb0f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Varargs\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"B-enguin":{"java":1850,"md":2,"fxml":35,"sh":1,"bat":1,"gradle":1,"txt":19}},"authorContributionVariance":{"B-enguin":160436.38},"authorDisplayNameMap":{"B-enguin":"CS2103T-T13-3 BENJ.. HUI"}} diff --git a/Bombbird2001_ip_master/authorship.json b/Bombbird2001_ip_master/authorship.json index 6c97033b..7a5480b1 100644 --- a/Bombbird2001_ip_master/authorship.json +++ b/Bombbird2001_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"# Shiba project template","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"3. After that, locate the `src/main/java/Shiba.java` file, right-click it, and choose `Run Shiba.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":22,"Bombbird2001":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":"Bombbird2001"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"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":"Bombbird2001"},"content":" mainClass.set(\"shiba.Shiba\")","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" archiveBaseName \u003d \"SHIBA-BOT\"","lastModifiedDate":"2023-08-28"},{"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":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"-":40,"Bombbird2001":7}},{"path":"src/main/java/shiba/Shiba.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.parsers.CommandParser;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.FilePersistentTaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Represents the main class of the Shiba chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public class Shiba {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" private final String name;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" private final CommandParser parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private Shiba(String name, String dataPath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" parser \u003d new CommandParser(new FilePersistentTaskList(dataPath));","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" private void start() {","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" Replier.printGreeting(name);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" parser.processUserInputs();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" Replier.printBye();","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" Shiba shiba \u003d new Shiba(\"SHIBA-BOT\", \"./shibaData/tasks.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" shiba.start();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":29}},{"path":"src/main/java/shiba/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.DeadlineTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to add a deadline task","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public class DeadlineCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" private final String fullCmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for DeadlineCommand, which adds a task of type deadline","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" public DeadlineCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" fullCmd \u003d cmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" DeadlineTask deadline \u003d DeadlineTask.fromCmd(fullCmd);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" addTask(deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":29}},{"path":"src/main/java/shiba/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to delete a task from the task list","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public class DeleteCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" private final String[] params;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for DeleteCommand, which deletes a task from the task list","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" public DeleteCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" params \u003d cmd.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" int taskNumber \u003d checkTaskNumber(params);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask task \u003d tasks.removeIndex(taskNumber - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent(\"Woof! I\u0027ve deleted this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel3Indent(task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" String taskWord \u003d tasks.size() \u003d\u003d 1 ? \" task\" : \" tasks\";","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent(\"You now have \" + tasks.size() + taskWord","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" + \" in the list. Some headpats please?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" tasks.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":39}},{"path":"src/main/java/shiba/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.EventTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to add an event task","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public class EventCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" private final String fullCmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for EventCommand, which adds a task of type event","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" public EventCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" fullCmd \u003d cmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" EventTask event \u003d EventTask.fromCmd(fullCmd);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" addTask(event);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":29}},{"path":"src/main/java/shiba/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to find tasks with a keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"public class FindCommand extends ShibaCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" private final String fullCmd;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * Constructs a FindCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" public FindCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" fullCmd \u003d cmd;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" String[] params \u003d fullCmd.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" if (params.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Please enter a keyword to search for!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" String keyword \u003d params[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" List\u003cShibaTask\u003e matchingTasks \u003d tasks.findTasksWithKeyword(keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" if (matchingTasks.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent(\"Woof! No tasks containing keyword found!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent(\"Woof! Here are the tasks containing the keyword!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent((i + 1) + \".\" + matchingTasks.get(i));","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Bombbird2001":48}},{"path":"src/main/java/shiba/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command that lists all tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"public class ListCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for ListCommand, which lists all tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" public ListCommand(PersistentTaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent(\"Woof! You have no tasks in the list - go browse some Reddit!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":30}},{"path":"src/main/java/shiba/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to mark a task as done","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public class MarkCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" private final String[] params;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for MarkCommand, which marks a task as done","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" public MarkCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" params \u003d cmd.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" int taskNumber \u003d checkTaskNumber(params);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" boolean res \u003d task.markDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" if (res) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent(\"Woof! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent(\"Woof! This task is already done!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel3Indent(task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" tasks.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":41}},{"path":"src/main/java/shiba/commands/ShibaCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.EmptyTasksException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command that the user can give to Shiba.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public abstract class ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * The types of commands that Shiba can execute.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" public enum CommandType {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" BYE,","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" LIST,","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" MARK,","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" UNMARK,","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" TODO,","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" DEADLINE,","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" EVENT,","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" DELETE,","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" FIND","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" protected PersistentTaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" protected ShibaCommand(PersistentTaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" * Executes the command.","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If there is an error executing the command.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" public abstract void execute() throws ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" * Checks if the task number is valid in the command. It should be present","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" * as the 2nd parameter.","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd The command parameters, split by spaces.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" * @return The task number if valid.","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If the task number is missing, invalid, or there are no tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" protected int checkTaskNumber(String[] cmd) throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" if (cmd.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Please specify a task number!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" int taskNumber \u003d Integer.parseInt(cmd[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" if (taskNumber \u003c 1 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" if (taskNumber \u003e tasks.size() \u0026\u0026 tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" throw new EmptyTasksException();","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Please specify a valid task number!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" return taskNumber;","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Invalid task number! Please enter a positive integer.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If there is an error saving the task after adding it.","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" protected void addTask(ShibaTask task) throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent(\"Woof! I\u0027ve added this task:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel3Indent(task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" String taskWord \u003d tasks.size() \u003d\u003d 1 ? \" task\" : \" tasks\";","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent(\"You now have \" + tasks.size() + taskWord","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":" + \" in the list. Now gimme some treats.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":" tasks.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":87}},{"path":"src/main/java/shiba/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.TodoTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to add a todo task","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public class TodoCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" private final String fullCmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for TodoCommand, which adds a task of type todo","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" public TodoCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" fullCmd \u003d cmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" TodoTask todo \u003d TodoTask.fromCmd(fullCmd);","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" addTask(todo);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":29}},{"path":"src/main/java/shiba/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to mark a task as not done","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public class UnmarkCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" private final String[] params;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for UnmarkCommand, which marks a task as not done","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" public UnmarkCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" params \u003d cmd.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" int taskNumber \u003d checkTaskNumber(params);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" boolean res \u003d task.markNotDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" if (res) {","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent(\"Woof! I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel2Indent(\"Woof! You have not done this task yet!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithLevel3Indent(task.toString());","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" Replier.printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" tasks.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":41}},{"path":"src/main/java/shiba/datetimeformats/DateOptionalTime.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.datetimeformats;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Represents a date with an optional time.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public class DateOptionalTime {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private LocalDate date;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * Constructs a DateOptionalTime object from a string. Accepts formats are the default ISO,","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" * default ISO with T replaced as space, and default ISO date only.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" * @param dateOptionalTime The string to parse.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the string is not in any of the accepted formats.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" public DateOptionalTime(String dateOptionalTime) throws InvalidCommandException {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" // Try with the default ISO format first","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" dateTime \u003d LocalDateTime.parse(dateOptionalTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" return;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" } catch (DateTimeParseException ignored) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" // Ignore exception, try to parse with next format","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" // Try with the T removed","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" dateTime \u003d LocalDateTime.parse(dateOptionalTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" return;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" } catch (DateTimeParseException ignored) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" // Ignore exception, try to parse with next format","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" // Try with default ISO date only format","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" date \u003d LocalDate.parse(dateOptionalTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Invalid date format! Date must be in the format\"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" + \" YYYY-MM-DD or YYYY-MM-DD HH:mm.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" * Gets a readable string representation (day month year hour min am/pm)","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" * of a DateOptionalTime object for display.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" * @return The string representation of the DateOptionalTime object.","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" public String getDisplayRepr() {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" if (dateTime !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" return dateTime.format(DateTimeFormatter.ofPattern(\"d LLL yyyy h:mma\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" return date.format(DateTimeFormatter.ofPattern(\"d LLL yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" if (dateTime !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" return dateTime.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" return date.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Bombbird2001":75}},{"path":"src/main/java/shiba/exceptions/EmptyTasksException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":" * Represents an exception that occurs when an operation is performed on an empty list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"public class EmptyTasksException extends ShibaException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" public EmptyTasksException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" super(\"You don\u0027t have any tasks yet!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":10}},{"path":"src/main/java/shiba/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":" * Represents an exception that occurs when an invalid command is given.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"public class InvalidCommandException extends ShibaException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" public InvalidCommandException(String msg) {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" super(msg);","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":10}},{"path":"src/main/java/shiba/exceptions/ShibaException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":" * Represents an exception that occurs when an error occurs in Shiba.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"public class ShibaException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" public ShibaException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":10}},{"path":"src/main/java/shiba/filehandler/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.filehandler;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"import shiba.parsers.SpaceSeparatedValuesParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * Handles the saving and reading of tasks to and from the disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" private final String dataPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" * Creates a new Storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" * @param dataPath Path to the file to be used for saving and reading tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" public Storage(String dataPath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" this.dataPath \u003d dataPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" * Saves the tasks to the disk, creating the file if it does not exist.","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks List of tasks to be saved.","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If there is an error saving the tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" public void saveTasks(List\u003cShibaTask\u003e tasks) throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" File file \u003d new File(dataPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" throw new ShibaException(\"Error creating save file!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" try (FileWriter fw \u003d new FileWriter(dataPath)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" boolean firstLineWritten \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" for (ShibaTask task : tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" if (firstLineWritten) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" fw.write(task.toSaveString());","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" firstLineWritten \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" throw new ShibaException(\"Error saving tasks to file!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" * Reads the saved tasks from the disk.","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" * @return List of tasks read from the disk.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If there is an error reading the tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" public List\u003cShibaTask\u003e readSavedTasks() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" File file \u003d new File(dataPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" ArrayList\u003cShibaTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask taskParsed \u003d ShibaTask.fromSaveParams(SpaceSeparatedValuesParser.parse(line));","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":" if (taskParsed !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" tasks.add(taskParsed);","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"Bombbird2001"},"content":" throw new ShibaException(\"Error reading tasks from file!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Bombbird2001":89}},{"path":"src/main/java/shiba/parsers/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.DeadlineCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.DeleteCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.EventCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.ListCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.MarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.ShibaCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.TodoCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.UnmarkCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.FilePersistentTaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" * Parses user input and executes the corresponding commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":"public class CommandParser {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" private static final Scanner SCANNER \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" private final FilePersistentTaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" * Creates a new CommandParser object.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks TaskList object to be used by the parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" public CommandParser(FilePersistentTaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" * Continually processes user input until bye command is issued","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" public void processUserInputs() {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" while (true) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" String input \u003d SCANNER.nextLine().strip();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" ShibaCommand.CommandType command \u003d ShibaCommand.CommandType.valueOf(","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" input.split(\" \")[0].toUpperCase());","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" ShibaCommand shibaCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" switch (command) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" case LIST:","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new ListCommand(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" case MARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new MarkCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" case UNMARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new UnmarkCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" case TODO:","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new TodoCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new DeadlineCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" case EVENT:","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new EventCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" case DELETE:","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new DeleteCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" case FIND:","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new FindCommand(tasks, input);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" case BYE:","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" return;","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand.execute();","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" } catch (ShibaException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" Replier.printException(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":" Replier.printUnknownCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":83}},{"path":"src/main/java/shiba/parsers/SpaceSeparatedValuesParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" * Parses space-separated values.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"public class SpaceSeparatedValuesParser {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Converts the given parameters into an escaped space-separated string.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" * @param params Vararg array of parameters to be converted.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" * @return A space-separated string of the given parameters.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" public static String convert(String... params) {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" for (String param : params) {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" if (!sb.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" sb.append(\" \");","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" sb.append(param.replace(\" \", \"\\\\ \"));","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" return sb.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" * Parses the given space-separated string into a list of strings.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" * @param line The space-separated string to be parsed.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" * @return A list of strings parsed from the given space-separated string.","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" public static List\u003cString\u003e parse(String line) {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" ArrayList\u003cString\u003e params \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" int index \u003d 0;","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" while (index \u003c line.length()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" char c \u003d line.charAt(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" if (c \u003d\u003d \u0027\\\\\u0027 \u0026\u0026 index \u003c line.length() - 1 \u0026\u0026 line.charAt(index + 1) \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" sb.append(\u0027 \u0027);","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" index +\u003d 2;","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" } else if (c \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" params.add(sb.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" sb.setLength(0);","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" index++;","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" sb.append(c);","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" index++;","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" if (!sb.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" params.add(sb.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" return params;","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Bombbird2001":58}},{"path":"src/main/java/shiba/tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.datetimeformats.DateOptionalTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.parsers.SpaceSeparatedValuesParser;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Represents a task with a datetime deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public class DeadlineTask extends ShibaTask {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private static final Pattern deadlineRegex \u003d Pattern.compile(\"(.+?) /by (.+)\");","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" private final DateOptionalTime deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" * Creates a DeadlineTask.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" * @param deadline The deadline of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" public DeadlineTask(String name, String deadline) throws InvalidCommandException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" super(name, TaskType.DEADLINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" this.deadline \u003d new DateOptionalTime(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" public String toSaveString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" return SpaceSeparatedValuesParser.convert(\"D\", isDone ? \"1\" : \"0\", name, deadline.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" return super.toString() + \" (by: \" + deadline.getDisplayRepr() + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" * Parses a DeadlineTask from a command.","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd The command to be parsed.","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" * @return The DeadlineTask parsed from the command, or null if the command is invalid.","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" public static DeadlineTask fromCmd(String cmd) throws InvalidCommandException {","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" String[] cmdSplit \u003d cmd.split(\" \", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" if (cmdSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Deadline name should not be empty!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" Matcher matcher1 \u003d deadlineRegex.matcher(cmdSplit[1]);","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" if (matcher1.find()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" return new DeadlineTask(matcher1.group(1), matcher1.group(2));","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Invalid deadline format! Deadline name,\"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" + \" /by parameter must be present and not empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":67}},{"path":"src/main/java/shiba/tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.datetimeformats.DateOptionalTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.parsers.SpaceSeparatedValuesParser;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Represents a task that starts at a specific datetime and ends at a specific datetime.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public class EventTask extends ShibaTask {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private static final Pattern option1Regex \u003d Pattern.compile(\"(.+?) /from (.+?) /to (.+)\");","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" private static final Pattern option2Regex \u003d Pattern.compile(\"(.+?) /to (.+?) /from (.+)\");","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" private final DateOptionalTime startTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" private final DateOptionalTime endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" * Creates a new EventTask.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" * @param from The start time of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" * @param to The end time of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" public EventTask(String name, String from, String to) throws InvalidCommandException {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" super(name, TaskType.EVENT);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" startTime \u003d new DateOptionalTime(from);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" endTime \u003d new DateOptionalTime(to);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" public String toSaveString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" return SpaceSeparatedValuesParser.convert(\"E\", isDone ? \"1\" : \"0\", name,","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" startTime.toString(), endTime.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" return super.toString() + \" (from: \" + startTime.getDisplayRepr() + \" to: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" + endTime.getDisplayRepr() + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" * Parses a EventTask from a command.","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd The command to be parsed.","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" * @return The EventTask parsed from the command, or null if the command is invalid.","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" public static EventTask fromCmd(String cmd) throws InvalidCommandException {","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" String[] cmdSplit \u003d cmd.split(\" \", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" if (cmdSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Event name should not be empty!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" Matcher matcher1 \u003d option1Regex.matcher(cmdSplit[1]);","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" if (matcher1.find()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" return new EventTask(matcher1.group(1), matcher1.group(2), matcher1.group(3));","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" Matcher matcher2 \u003d option2Regex.matcher(cmdSplit[1]);","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" if (matcher2.find()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" return new EventTask(matcher2.group(1), matcher2.group(3), matcher2.group(2));","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Invalid event format! Event name, /from and\"","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" + \" /to parameters must be present and not empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":78}},{"path":"src/main/java/shiba/tasks/FilePersistentTaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.filehandler.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Implementation of a persistent task list that saves tasks to a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public class FilePersistentTaskList implements PersistentTaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private final ArrayList\u003cShibaTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * Constructs a FilePersistentTaskList object.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" * @param dataPath Path to the file where tasks are saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" public FilePersistentTaskList(String dataPath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" storage \u003d new Storage(dataPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" tasks.addAll(storage.readSavedTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" } catch (ShibaException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" Replier.printException(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" public void addTask(ShibaTask task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" public ShibaTask removeIndex(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" public ShibaTask get(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" public void save() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" public List\u003cShibaTask\u003e findTasksWithKeyword(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" ArrayList\u003cShibaTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" for (ShibaTask task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":" if (task.containsKeyword(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":" return matchingTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":85}},{"path":"src/main/java/shiba/tasks/PersistentTaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Interface for a persistent task list, that is, tasks can be saved between","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * runs of the program.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public interface PersistentTaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * @param task The task to add.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" void addTask(ShibaTask task);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" * Removes the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" * @param index Index of the task to remove.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask removeIndex(int index);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" * Gets the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" * @param index Index of the task to get.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask get(int index);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" * Gets the number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" int size();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" * Saves the current task list state to storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If there is an error saving the tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" void save() throws ShibaException;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" * Finds tasks containing the specified keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" * @return A list of tasks containing the specified keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" List\u003cShibaTask\u003e findTasksWithKeyword(String keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Bombbird2001":55}},{"path":"src/main/java/shiba/tasks/ShibaTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Represents a task that can be added to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public abstract class ShibaTask {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" protected enum TaskType {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" TODO,","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" DEADLINE,","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" EVENT","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" protected final String name;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" private final TaskType type;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" protected ShibaTask(String name, TaskType type) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" * Marks the task as done, if not already done.","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" * @return True if the task was not already done, else false.","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" public boolean markDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" if (isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" return false;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" return true;","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" * Marks the task as not done, if already done.","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" * @return True if the task was already done, else false.","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" public boolean markNotDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" if (!isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" return false;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" return true;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" * Gets the label in the form of [X] for the task type.","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" * @return The label for the task type.","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" private String getTaskLabel() {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" switch (type) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" case TODO:","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" return \"[T]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" return \"[D]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" case EVENT:","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" return \"[E]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" return \"[?]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" * Converts the task to a string to be saved to disk.","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" public abstract String toSaveString();","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" * Parses a task from the provided string parameters.","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":" * @param params List of string parameters to parse tasks from.","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" * @return The parsed task, or null if the task cannot be parsed from the provided parameters","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":" * due to insufficient or incorrect parameters.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"Bombbird2001"},"content":" public static ShibaTask fromSaveParams(List\u003cString\u003e params) {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"Bombbird2001"},"content":" if (params.size() \u003c 3) {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"Bombbird2001"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask parsedTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"Bombbird2001"},"content":" boolean isDone \u003d params.get(1).equals(\"1\");","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"Bombbird2001"},"content":" String name \u003d params.get(2);","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"Bombbird2001"},"content":" switch (params.get(0)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"Bombbird2001"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"Bombbird2001"},"content":" parsedTask \u003d new TodoTask(name);","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"Bombbird2001"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"Bombbird2001"},"content":" if (params.size() \u003c 4) {","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"Bombbird2001"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"Bombbird2001"},"content":" parsedTask \u003d new DeadlineTask(name, params.get(3));","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"Bombbird2001"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"Bombbird2001"},"content":" if (params.size() \u003c 5) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"Bombbird2001"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"Bombbird2001"},"content":" parsedTask \u003d new EventTask(name, params.get(3), params.get(4));","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"Bombbird2001"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"Bombbird2001"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"Bombbird2001"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"Bombbird2001"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"Bombbird2001"},"content":" if (isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"Bombbird2001"},"content":" parsedTask.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"Bombbird2001"},"content":" return parsedTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Bombbird2001"},"content":" * Checks if the task name contains the specified keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Bombbird2001"},"content":" * @param keyword The keyword to check for.","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Bombbird2001"},"content":" * @return True if the task name contains the keyword, else false.","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Bombbird2001"},"content":" public boolean containsKeyword(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Bombbird2001"},"content":" return name.toLowerCase().contains(keyword.toLowerCase());","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":139,"author":{"gitId":"Bombbird2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":140,"author":{"gitId":"Bombbird2001"},"content":" return getTaskLabel() + \"[\" + (isDone ? \"X\" : \" \") + \"] \" + name;","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":142,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":142}},{"path":"src/main/java/shiba/tasks/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.parsers.SpaceSeparatedValuesParser;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" * Represents a task with no date, time constraints.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"public class TodoTask extends ShibaTask {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Creates a TodoTask.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" public TodoTask(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" super(name, TaskType.TODO);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" public String toSaveString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" return SpaceSeparatedValuesParser.convert(\"T\", isDone ? \"1\" : \"0\", name);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" return super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" * Parses a TodoTask from a command.","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd The command to be parsed.","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" * @return The TodoTask parsed from the command, or null if the command is invalid.","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" public static TodoTask fromCmd(String cmd) throws InvalidCommandException {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" String[] cmdSplit \u003d cmd.split(\" \", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" if (!cmdSplit[0].toUpperCase().equals(TaskType.TODO.name())) {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Expected todo command!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" if (cmdSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Todo name should not be empty!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" return new TodoTask(cmdSplit[1]);","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":55}},{"path":"src/main/java/shiba/ui/Replier.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":" * Represents a class that prints messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"public class Replier {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" private static final String HORZ_LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" * Prints the greeting message.","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" public static void printGreeting(String botName) {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" printWithLevel2Indent(\"Woof! I\u0027m \" + botName);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" printWithLevel2Indent(\"What can I bark at you?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" * Prints the bye message","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" public static void printBye() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" printWithLevel2Indent(\"Woof! Hope to bark at you again soon!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" * Prints the unknown command message.","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" public static void printUnknownCommand() {","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" printWithLevel2Indent(\"Woof! I don\u0027t know what that command is!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" * Prints the invalid command message.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" * @param e The ShibaException whose message is to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" public static void printException(ShibaException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" printWithLevel2Indent(\"Woof! \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" printHorizontalLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" * Prints a horizontal line.","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" public static void printHorizontalLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" printWithLevel1Indent(HORZ_LINE);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" * Prints the given message with a single tab indent (4 spaces).","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" public static void printWithLevel1Indent(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" printWithIndents(message, 1, 0);","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" * Prints the given message with a single tab indent and 1 space.","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" public static void printWithLevel2Indent(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" printWithIndents(message, 1, 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" * Prints the given message with a single tab indent and 2 spaces.","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" public static void printWithLevel3Indent(String message) {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" printWithIndents(message, 1, 3);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":" * Prints the given message with the given number of indents (spaces).","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Bombbird2001"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Bombbird2001"},"content":" * @param tabs The number of tab indents (4 spaces each).","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"Bombbird2001"},"content":" * @param spaces The number of spaces indents (in addition to tabs).","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"Bombbird2001"},"content":" public static void printWithIndents(String message, int tabs, int spaces) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"Bombbird2001"},"content":" System.out.println(\" \".repeat(tabs * 4 + spaces) + message);","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":94}},{"path":"src/test/java/shiba/commands/TodoCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.TaskListStub;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public class TodoCommandTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private final PersistentTaskList tasks \u003d new TaskListStub();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" public void execute_validCommand() throws ShibaException {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" new TodoCommand(tasks, \"todo Pet a Shiba\").execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"[T][ ] Pet a Shiba\", tasks.get(0).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" public void execute_validCommand_spaces() throws ShibaException {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" new TodoCommand(tasks, \"todo Pet a Shiba \").execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"[T][ ] Pet a Shiba \", tasks.get(0).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" public void execute_invalidCommand_noName() {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new TodoCommand(tasks, \"todo\").execute());","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" public void execute_invalidCommand_wrongCommand() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new TodoCommand(tasks, \"mark\").execute());","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Bombbird2001":39}},{"path":"src/test/java/shiba/datetimeformats/DateOptionalTimeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.datetimeformats;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public class DateOptionalTimeTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormat_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-08-28T20:31\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"2023-08-28T20:31\", dateOptionalTime.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormatNoT_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-08-28 20:34\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"2023-08-28T20:34\", dateOptionalTime.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoDateOnly_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-08-10\");","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"2023-08-10\", dateOptionalTime.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormat_invalid1() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new DateOptionalTime(\"2023-28-08T20:31\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormat_invalid2() {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new DateOptionalTime(\"2023-08 28T20:31\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormatNoT_invalid1() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new DateOptionalTime(\"2023-28-08 20:31\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormatNoT_invalid2() {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new DateOptionalTime(\"2023 08 28 20:31\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" public void getDisplayRestr_isoFormat_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-08-28T20:31\");","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"28 Aug 2023 8:31PM\", dateOptionalTime.getDisplayRepr());","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" public void getDisplayRestr_isoFormatNoT_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-06-14 10:00\");","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"14 Jun 2023 10:00AM\", dateOptionalTime.getDisplayRepr());","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" public void getDisplayRestr_isoDateOnly_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-02-01\");","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"1 Feb 2023\", dateOptionalTime.getDisplayRepr());","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Bombbird2001":66}},{"path":"src/test/java/shiba/tasks/TaskListStub.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" * Represents a stub for a persistent task list, which will not perform saving or loading of data from file.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"public class TaskListStub implements PersistentTaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" private final ArrayList\u003cShibaTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" public void addTask(ShibaTask task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" public ShibaTask removeIndex(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" public ShibaTask get(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" return tasks.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" public void save() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" // This stub will not save to file","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" public List\u003cShibaTask\u003e findTasksWithKeyword(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Bombbird2001":41}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"todo Do tutorials","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"deadline Prepare for CA1 /by 14 Sept","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"deadline Prepare for CA1 /by 2023-09-14","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"event VATSIM Ho Chih Minh - Singapore SeaLink /from 23 Sept 8pm /to 12am","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"event VATSIM Ho Chih Minh - Singapore SeaLink /from 2023-09-23 20:00 /to 2023-09-24 00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"unmark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"unmark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":"mark ierfgheiurh","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"mark 0","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":"unmark 999","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":"some weird command","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":"deadline /by 14 Sept","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":"event Random event /from 2023-09-17 20:00","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":"delete -1","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":"find","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":"find TUTORIAL","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":"find Minecraft","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":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":"Bombbird2001"},"content":"REM delete saved data folder","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"if exist shibaData rmdir shibaData /s /q","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\shiba\\*.java","lastModifiedDate":"2023-08-27"},{"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":"Bombbird2001"},"content":"java -classpath ..\\bin shiba.Shiba \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"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":{"-":19,"Bombbird2001":5}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"# SHIBA-BOT project template","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"This is a project template for a greenfield Java project. It\u0027s inspired by the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"3. After that, locate the `src/main/java/Shiba.java` file, right-click it, and choose `Run Shiba.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see a window pop up with SHIBA-BOT greeting you.","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"-":13,"Bombbird2001":3}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"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":"Bombbird2001"},"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":"Bombbird2001"},"content":"javafx {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" version \u003d \"17.0.7\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" modules \u003d [ \u0027javafx.controls\u0027 ]","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" mainClass.set(\"shiba.Shiba\")","lastModifiedDate":"2023-08-28"},{"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":"Bombbird2001"},"content":" archiveBaseName \u003d \"SHIBA-BOT\"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"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"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":"checkstyle {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":"tasks.withType(JavaCompile).configureEach {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" options.release \u003d 11","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"-":40,"Bombbird2001":17}},{"path":"src/main/java/shiba/Shiba.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.parsers.CommandParser;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.FilePersistentTaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.MainWindow;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" * Represents the main class of the Shiba chatbot.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"public class Shiba {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" private static Shiba singleton;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private final String name;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" private final CommandParser parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" private Shiba(String name, String dataPath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" parser \u003d new CommandParser(new FilePersistentTaskList(dataPath));","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" if (singleton \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" singleton \u003d this;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" System.out.println(\"Warning: Multiple instances of Shiba detected!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" public void start() {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" Replier.printGreeting(name);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" private void stop() {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" Replier.printBye();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" * Processes the user input received from UI window.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" * @param input The user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" public void processUserInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" boolean quit \u003d parser.processUserInput(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" MainWindow mainWindow \u003d MainWindow.getInstance();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" if (quit \u0026\u0026 mainWindow !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" stop();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" mainWindow.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" public String getName() {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" return name;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" new Shiba(\"SHIBA-BOT\", \"./shibaData/tasks.txt\");","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" Application.launch(MainWindow.class);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" MainWindow.getInstance().cleanUp();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" * Returns the singleton instance of Shiba.","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" * @return The singleton instance of Shiba.","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" public static Shiba getInstance() {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" return singleton;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":70}},{"path":"src/main/java/shiba/commands/BellyRubCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.Random;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.FilePersistentTaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command that gives the bot belly rubs.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public class BellyRubCommand extends ShibaCommand {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" private static final Random random \u003d new Random();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" private static final String msg1 \u003d \"Woof! More please!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private static final String msg2 \u003d \"\u003cHappy Shiba noises\u003e\";","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for BellyRubCommand.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" public BellyRubCommand(FilePersistentTaskList tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" public void execute() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(random.nextBoolean() ? msg1 : msg2);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" Replier.reply();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Bombbird2001":33}},{"path":"src/main/java/shiba/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.DeadlineTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to add a deadline task","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public class DeadlineCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" private final String fullCmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for DeadlineCommand, which adds a task of type deadline","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" public DeadlineCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" fullCmd \u003d cmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" DeadlineTask deadline \u003d DeadlineTask.fromCmd(fullCmd);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" addTask(deadline);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":32}},{"path":"src/main/java/shiba/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to delete a task from the task list","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public class DeleteCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" private final String[] params;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for DeleteCommand, which deletes a task from the task list","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" public DeleteCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" params \u003d cmd.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" int taskNumber \u003d checkTaskNumber(params);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask task \u003d tasks.removeIndex(taskNumber - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(\"Woof! I\u0027ve deleted this task:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithOneIndent(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" String taskWord \u003d tasks.size() \u003d\u003d 1 ? \" task\" : \" tasks\";","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(\"You now have \" + tasks.size() + taskWord","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" + \" in the list. Some headpats please?\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" Replier.reply();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" tasks.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":41}},{"path":"src/main/java/shiba/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.EventTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to add an event task","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public class EventCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" private final String fullCmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for EventCommand, which adds a task of type event","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" public EventCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" fullCmd \u003d cmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" EventTask event \u003d EventTask.fromCmd(fullCmd);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" addTask(event);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":32}},{"path":"src/main/java/shiba/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to find tasks with a keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"public class FindCommand extends ShibaCommand {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" private final String fullCmd;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * Constructs a FindCommand.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" public FindCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" fullCmd \u003d cmd;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" String[] params \u003d fullCmd.split(\" \", 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" if (params.length \u003c 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Please enter a keyword to search for!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" String keyword \u003d params[1];","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" List\u003cShibaTask\u003e matchingTasks \u003d tasks.findTasksWithKeyword(keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" if (matchingTasks.isEmpty()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(\"Woof! No tasks containing keyword found!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(\"Woof! Here are the tasks containing the keyword!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" for (int i \u003d 0; i \u003c matchingTasks.size(); i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents((i + 1) + \". \" + matchingTasks.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" Replier.reply();","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Bombbird2001":50}},{"path":"src/main/java/shiba/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command that lists all tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"public class ListCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for ListCommand, which lists all tasks","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" public ListCommand(PersistentTaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" public void execute() {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents((i + 1) + \". \" + tasks.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(\"Woof! You have no tasks in the list - go browse some Reddit!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" Replier.reply();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":32}},{"path":"src/main/java/shiba/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to mark a task as done","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public class MarkCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" private final String[] params;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for MarkCommand, which marks a task as done","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" public MarkCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" params \u003d cmd.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" int taskNumber \u003d checkTaskNumber(params);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" boolean res \u003d task.markDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" if (res) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(\"Woof! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(\"Woof! This task is already done!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithOneIndent(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" Replier.reply();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" tasks.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":43}},{"path":"src/main/java/shiba/commands/PatCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.Random;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command that pats the bot","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public class PatCommand extends ShibaCommand {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" private static final Random random \u003d new Random();","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" private static final String msg1 \u003d \"Woof! I\u0027m so happy!\";","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private static final String msg2 \u003d \"\u003cHappy Shiba noises\u003e\";","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for PatCommand","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" public PatCommand(PersistentTaskList tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" public void execute() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(random.nextBoolean() ? msg1 : msg2);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" Replier.reply();","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Bombbird2001":33}},{"path":"src/main/java/shiba/commands/ShibaCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.EmptyTasksException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command that the user can give to Shiba.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public abstract class ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * The types of commands that Shiba can execute.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" public enum CommandType {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" BYE,","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" LIST,","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" MARK,","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" UNMARK,","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" TODO,","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" DEADLINE,","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" EVENT,","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" DELETE,","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" FIND,","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" PAT,","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" BELLYRUB","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" protected final PersistentTaskList tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" protected ShibaCommand(PersistentTaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" * Executes the command.","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If there is an error executing the command.","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" public abstract void execute() throws ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" * Checks if the task number is valid in the command. It should be present","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" * as the 2nd parameter.","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd The command parameters, split by spaces.","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" * @return The task number if valid.","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If the task number is missing, invalid, or there are no tasks in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" protected int checkTaskNumber(String[] cmd) throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" if (cmd.length \u003c 2) {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Please specify a task number!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" int taskNumber \u003d Integer.parseInt(cmd[1]);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" if (taskNumber \u003c 1 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" if (taskNumber \u003e tasks.size() \u0026\u0026 tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" throw new EmptyTasksException();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Please specify a valid task number!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" return taskNumber;","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Invalid task number! Please enter a positive integer.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If there is an error saving the task after adding it.","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" protected void addTask(ShibaTask task) throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(\"Woof! I\u0027ve added this task:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithOneIndent(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" String taskWord \u003d tasks.size() \u003d\u003d 1 ? \" task\" : \" tasks\";","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(\"You now have \" + tasks.size() + taskWord","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" + \" in the list. Now gimme some treats.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":" Replier.reply();","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Bombbird2001"},"content":" tasks.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":88}},{"path":"src/main/java/shiba/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.TodoTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to add a todo task","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public class TodoCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" private final String fullCmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for TodoCommand, which adds a task of type todo","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" public TodoCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" fullCmd \u003d cmd;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" TodoTask todo \u003d TodoTask.fromCmd(fullCmd);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" addTask(todo);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":32}},{"path":"src/main/java/shiba/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * Represents a command to mark a task as not done","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public class UnmarkCommand extends ShibaCommand {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" private final String[] params;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for UnmarkCommand, which marks a task as not done","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks Current state of task list","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd Full command string","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" public UnmarkCommand(PersistentTaskList tasks, String cmd) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" super(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" params \u003d cmd.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" public void execute() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" int taskNumber \u003d checkTaskNumber(params);","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask task \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" boolean res \u003d task.markNotDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" if (res) {","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(\"Woof! I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithNoIndents(\"Woof! You have not done this task yet!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" Replier.printWithOneIndent(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" Replier.reply();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" tasks.save();","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":43}},{"path":"src/main/java/shiba/datetimeformats/DateOptionalTime.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.datetimeformats;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Represents a date with an optional time.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public class DateOptionalTime {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private LocalDate date;","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" private LocalDateTime dateTime;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * Constructs a DateOptionalTime object from a string. Accepts formats are the default ISO,","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" * default ISO with T replaced as space, and default ISO date only.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" * @param dateOptionalTime The string to parse.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the string is not in any of the accepted formats.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" public DateOptionalTime(String dateOptionalTime) throws InvalidCommandException {","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" // Try with the default ISO format first","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" dateTime \u003d LocalDateTime.parse(dateOptionalTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" return;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" } catch (DateTimeParseException ignored) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" // Ignore exception, try to parse with next format","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" // Try with the T removed","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" dateTime \u003d LocalDateTime.parse(dateOptionalTime, DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\"));","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" return;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" } catch (DateTimeParseException ignored) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" // Ignore exception, try to parse with next format","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" // Try with default ISO date only format","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" date \u003d LocalDate.parse(dateOptionalTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Invalid date format! Date must be in the format\"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" + \" YYYY-MM-DD or YYYY-MM-DD HH:mm.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" * Gets a readable string representation (day month year hour min am/pm)","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" * of a DateOptionalTime object for display.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" * @return The string representation of the DateOptionalTime object.","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" public String getDisplayRepr() {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" if (dateTime !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" return dateTime.format(DateTimeFormatter.ofPattern(\"d LLL yyyy h:mma\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" return date.format(DateTimeFormatter.ofPattern(\"d LLL yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" if (dateTime !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" return dateTime.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" return date.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Bombbird2001":75}},{"path":"src/main/java/shiba/exceptions/EmptyTasksException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":" * Represents an exception that occurs when an operation is performed on an empty list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"public class EmptyTasksException extends ShibaException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" public EmptyTasksException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" super(\"You don\u0027t have any tasks yet!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":10}},{"path":"src/main/java/shiba/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":" * Represents an exception that occurs when an invalid command is given.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"public class InvalidCommandException extends ShibaException {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" public InvalidCommandException(String msg) {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" super(msg);","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":10}},{"path":"src/main/java/shiba/exceptions/ShibaException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":" * Represents an exception that occurs when an error occurs in Shiba.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"public class ShibaException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" public ShibaException(String message) {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" super(message);","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":10}},{"path":"src/main/java/shiba/filehandler/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.filehandler;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"import shiba.parsers.SpaceSeparatedValuesParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.ShibaTask;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * Handles the saving and reading of tasks to and from the disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":"public class Storage {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" private final String dataPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" * Creates a new Storage object.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" * @param dataPath Path to the file to be used for saving and reading tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" public Storage(String dataPath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" this.dataPath \u003d dataPath;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" * Saves the tasks to the disk, creating the file if it does not exist.","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks List of tasks to be saved.","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If there is an error saving the tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" public void saveTasks(List\u003cShibaTask\u003e tasks) throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" File file \u003d new File(dataPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" throw new ShibaException(\"Error creating save file!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" try (FileWriter fw \u003d new FileWriter(dataPath)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" boolean firstLineWritten \u003d false;","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" for (ShibaTask task : tasks) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" if (firstLineWritten) {","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" fw.write(task.toSaveString());","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" firstLineWritten \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" throw new ShibaException(\"Error saving tasks to file!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" * Reads the saved tasks from the disk.","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" * @return List of tasks read from the disk.","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If there is an error reading the tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" public List\u003cShibaTask\u003e readSavedTasks() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" File file \u003d new File(dataPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" ArrayList\u003cShibaTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask taskParsed \u003d ShibaTask.fromSaveParams(SpaceSeparatedValuesParser.parse(line));","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":" if (taskParsed !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" tasks.add(taskParsed);","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" return tasks;","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"Bombbird2001"},"content":" throw new ShibaException(\"Error reading tasks from file!\");","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Bombbird2001":89}},{"path":"src/main/java/shiba/parsers/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.BellyRubCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.DeadlineCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.DeleteCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.EventCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.ListCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.MarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.PatCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.ShibaCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.TodoCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"import shiba.commands.UnmarkCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.FilePersistentTaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" * Parses user input and executes the corresponding commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":"public class CommandParser {","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" private final FilePersistentTaskList tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" * Creates a new CommandParser object.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" * @param tasks TaskList object to be used by the parser.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" public CommandParser(FilePersistentTaskList tasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" * Continually processes user input until bye command is issued","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" * @return True if the bye command is issued, false otherwise.","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" public boolean processUserInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" ShibaCommand.CommandType command \u003d ShibaCommand.CommandType.valueOf(","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" input.split(\" \")[0].toUpperCase());","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" ShibaCommand shibaCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" switch (command) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" case LIST:","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new ListCommand(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" case MARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new MarkCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" case UNMARK:","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new UnmarkCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" case TODO:","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new TodoCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new DeadlineCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" case EVENT:","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new EventCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" case DELETE:","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new DeleteCommand(tasks, input);","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" case FIND:","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new FindCommand(tasks, input);","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" case PAT:","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new PatCommand(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" case BELLYRUB:","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand \u003d new BellyRubCommand(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" case BYE:","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":" shibaCommand.execute();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" } catch (ShibaException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" Replier.printException(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":" Replier.printUnknownCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Bombbird2001"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":88}},{"path":"src/main/java/shiba/parsers/SpaceSeparatedValuesParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.parsers;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" * Parses space-separated values.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"public class SpaceSeparatedValuesParser {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Converts the given parameters into an escaped space-separated string.","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" * @param params Vararg array of parameters to be converted.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" * @return A space-separated string of the given parameters.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" public static String convert(String... params) {","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" for (String param : params) {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" if (sb.length() !\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" sb.append(\" \");","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" sb.append(param.replace(\" \", \"\\\\ \"));","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" return sb.toString();","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" * Parses the given space-separated string into a list of strings.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" * @param line The space-separated string to be parsed.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" * @return A list of strings parsed from the given space-separated string.","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" public static List\u003cString\u003e parse(String line) {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" ArrayList\u003cString\u003e params \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" int index \u003d 0;","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" while (index \u003c line.length()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" char c \u003d line.charAt(index);","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" if (c \u003d\u003d \u0027\\\\\u0027 \u0026\u0026 index \u003c line.length() - 1 \u0026\u0026 line.charAt(index + 1) \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" sb.append(\u0027 \u0027);","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" index +\u003d 2;","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" } else if (c \u003d\u003d \u0027 \u0027) {","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" params.add(sb.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" sb.setLength(0);","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" index++;","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" sb.append(c);","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" index++;","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" if (sb.length() !\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" params.add(sb.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" return params;","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"Bombbird2001":58}},{"path":"src/main/java/shiba/tasks/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.datetimeformats.DateOptionalTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.parsers.SpaceSeparatedValuesParser;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Represents a task with a datetime deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public class DeadlineTask extends ShibaTask {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private static final Pattern deadlineRegex \u003d Pattern.compile(\"(.+?) /by (.+)\");","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" private final DateOptionalTime deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" * Creates a DeadlineTask.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" * @param deadline The deadline of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" public DeadlineTask(String name, String deadline) throws InvalidCommandException {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" super(name, TaskType.DEADLINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" this.deadline \u003d new DateOptionalTime(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" public String toSaveString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" return SpaceSeparatedValuesParser.convert(\"D\", isDone ? \"1\" : \"0\", name, deadline.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" return super.toString() + \" (by: \" + deadline.getDisplayRepr() + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" * Parses a DeadlineTask from a command.","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd The command to be parsed.","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" * @return The DeadlineTask parsed from the command, or null if the command is invalid.","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" public static DeadlineTask fromCmd(String cmd) throws InvalidCommandException {","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" String[] cmdSplit \u003d cmd.split(\" \", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" if (cmdSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Deadline name should not be empty!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" Matcher matcher1 \u003d deadlineRegex.matcher(cmdSplit[1]);","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" if (matcher1.find()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" return new DeadlineTask(matcher1.group(1), matcher1.group(2));","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Invalid deadline format! Deadline name,\"","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" + \" /by parameter must be present and not empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":67}},{"path":"src/main/java/shiba/tasks/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.datetimeformats.DateOptionalTime;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.parsers.SpaceSeparatedValuesParser;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Represents a task that starts at a specific datetime and ends at a specific datetime.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public class EventTask extends ShibaTask {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private static final Pattern option1Regex \u003d Pattern.compile(\"(.+?) /from (.+?) /to (.+)\");","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" private static final Pattern option2Regex \u003d Pattern.compile(\"(.+?) /to (.+?) /from (.+)\");","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" private final DateOptionalTime startTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" private final DateOptionalTime endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" * Creates a new EventTask.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" * @param from The start time of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" * @param to The end time of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" public EventTask(String name, String from, String to) throws InvalidCommandException {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" super(name, TaskType.EVENT);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" startTime \u003d new DateOptionalTime(from);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" endTime \u003d new DateOptionalTime(to);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" public String toSaveString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" return SpaceSeparatedValuesParser.convert(\"E\", isDone ? \"1\" : \"0\", name,","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" startTime.toString(), endTime.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" return super.toString() + \" (from: \" + startTime.getDisplayRepr() + \" to: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" + endTime.getDisplayRepr() + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" * Parses a EventTask from a command.","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd The command to be parsed.","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" * @return The EventTask parsed from the command, or null if the command is invalid.","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" public static EventTask fromCmd(String cmd) throws InvalidCommandException {","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" String[] cmdSplit \u003d cmd.split(\" \", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" if (cmdSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Event name should not be empty!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" Matcher matcher1 \u003d option1Regex.matcher(cmdSplit[1]);","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" if (matcher1.find()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" return new EventTask(matcher1.group(1), matcher1.group(2), matcher1.group(3));","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" Matcher matcher2 \u003d option2Regex.matcher(cmdSplit[1]);","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" if (matcher2.find()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" return new EventTask(matcher2.group(1), matcher2.group(3), matcher2.group(2));","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Invalid event format! Event name, /from and\"","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" + \" /to parameters must be present and not empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":78}},{"path":"src/main/java/shiba/tasks/FilePersistentTaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.filehandler.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.Replier;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Implementation of a persistent task list that saves tasks to a file.","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public class FilePersistentTaskList implements PersistentTaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private final ArrayList\u003cShibaTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" private final Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * Constructs a FilePersistentTaskList object.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" * @param dataPath Path to the file where tasks are saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" public FilePersistentTaskList(String dataPath) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" storage \u003d new Storage(dataPath);","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" tasks.addAll(storage.readSavedTasks());","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" } catch (ShibaException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" Replier.printException(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" public void addTask(ShibaTask task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" public ShibaTask removeIndex(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" public ShibaTask get(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" public int size() {","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" return tasks.size();","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" public void save() throws ShibaException {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" storage.saveTasks(tasks);","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" public List\u003cShibaTask\u003e findTasksWithKeyword(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" ArrayList\u003cShibaTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" for (ShibaTask task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":" if (task.containsKeyword(keyword)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":" return matchingTasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":85}},{"path":"src/main/java/shiba/tasks/PersistentTaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Interface for a persistent task list, that is, tasks can be saved between","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * runs of the program.","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public interface PersistentTaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" * @param task The task to add.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" void addTask(ShibaTask task);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" * Removes the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" * @param index Index of the task to remove.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask removeIndex(int index);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" * Gets the task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" * @param index Index of the task to get.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask get(int index);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" * Gets the number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" int size();","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" * Saves the current task list state to storage.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" * @throws ShibaException If there is an error saving the tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" void save() throws ShibaException;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" * Finds tasks containing the specified keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" * @param keyword The keyword to search for.","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" * @return A list of tasks containing the specified keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" List\u003cShibaTask\u003e findTasksWithKeyword(String keyword);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Bombbird2001":55}},{"path":"src/main/java/shiba/tasks/ShibaTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Represents a task that can be added to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public abstract class ShibaTask {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" protected enum TaskType {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" TODO,","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" DEADLINE,","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" EVENT","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" protected final String name;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" private final TaskType type;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" protected ShibaTask(String name, TaskType type) {","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" * Marks the task as done, if not already done.","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" * @return True if the task was not already done, else false.","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" public boolean markDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" if (isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" return false;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" return true;","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" * Marks the task as not done, if already done.","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" * @return True if the task was already done, else false.","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" public boolean markNotDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" if (!isDone) {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" return false;","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" return true;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" * Gets the label in the form of [X] for the task type.","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" * @return The label for the task type.","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" private String getTaskLabel() {","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" switch (type) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" case TODO:","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" return \"[T]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" case DEADLINE:","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" return \"[D]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" case EVENT:","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" return \"[E]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" return \"[?]\";","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" * Converts the task to a string to be saved to disk.","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" public abstract String toSaveString();","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" * Parses a task from the provided string parameters.","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":" * @param params List of string parameters to parse tasks from.","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" * @return The parsed task, or null if the task cannot be parsed from the provided parameters","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":" * due to insufficient or incorrect parameters.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"Bombbird2001"},"content":" public static ShibaTask fromSaveParams(List\u003cString\u003e params) {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"Bombbird2001"},"content":" if (params.size() \u003c 3) {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"Bombbird2001"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"Bombbird2001"},"content":" ShibaTask parsedTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"Bombbird2001"},"content":" boolean isDone \u003d params.get(1).equals(\"1\");","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"Bombbird2001"},"content":" String name \u003d params.get(2);","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"Bombbird2001"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"Bombbird2001"},"content":" switch (params.get(0)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"Bombbird2001"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"Bombbird2001"},"content":" parsedTask \u003d new TodoTask(name);","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"Bombbird2001"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"Bombbird2001"},"content":" if (params.size() \u003c 4) {","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"Bombbird2001"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"Bombbird2001"},"content":" parsedTask \u003d new DeadlineTask(name, params.get(3));","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"Bombbird2001"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"Bombbird2001"},"content":" if (params.size() \u003c 5) {","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"Bombbird2001"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"Bombbird2001"},"content":" parsedTask \u003d new EventTask(name, params.get(3), params.get(4));","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"Bombbird2001"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"Bombbird2001"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"Bombbird2001"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"Bombbird2001"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"Bombbird2001"},"content":" return null;","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"Bombbird2001"},"content":" if (isDone) {","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"Bombbird2001"},"content":" parsedTask.markDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"Bombbird2001"},"content":" return parsedTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-29"},{"lineNumber":126,"author":{"gitId":"Bombbird2001"},"content":" * Checks if the task name contains the specified keyword.","lastModifiedDate":"2023-08-29"},{"lineNumber":127,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-29"},{"lineNumber":128,"author":{"gitId":"Bombbird2001"},"content":" * @param keyword The keyword to check for.","lastModifiedDate":"2023-08-29"},{"lineNumber":129,"author":{"gitId":"Bombbird2001"},"content":" * @return True if the task name contains the keyword, else false.","lastModifiedDate":"2023-08-29"},{"lineNumber":130,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"Bombbird2001"},"content":" public boolean containsKeyword(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"Bombbird2001"},"content":" return name.toLowerCase().contains(keyword.toLowerCase());","lastModifiedDate":"2023-08-29"},{"lineNumber":133,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":139,"author":{"gitId":"Bombbird2001"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":140,"author":{"gitId":"Bombbird2001"},"content":" return getTaskLabel() + \"[\" + (isDone ? \"X\" : \" \") + \"] \" + name;","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":142,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":142}},{"path":"src/main/java/shiba/tasks/TodoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import shiba.parsers.SpaceSeparatedValuesParser;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" * Represents a task with no date, time constraints.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"public class TodoTask extends ShibaTask {","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" * Creates a TodoTask.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" * @param name The name of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" public TodoTask(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" super(name, TaskType.TODO);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" public String toSaveString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" return SpaceSeparatedValuesParser.convert(\"T\", isDone ? \"1\" : \"0\", name);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" return super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" * Parses a TodoTask from a command.","lastModifiedDate":"2023-08-22"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" * @param cmd The command to be parsed.","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" * @return The TodoTask parsed from the command, or null if the command is invalid.","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" * @throws InvalidCommandException If the command is invalid.","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" public static TodoTask fromCmd(String cmd) throws InvalidCommandException {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" String[] cmdSplit \u003d cmd.split(\" \", 2);","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" if (!cmdSplit[0].toUpperCase().equals(TaskType.TODO.name())) {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Expected todo command!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" if (cmdSplit.length !\u003d 2) {","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" throw new InvalidCommandException(\"Todo name should not be empty!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" return new TodoTask(cmdSplit[1]);","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":55}},{"path":"src/main/java/shiba/ui/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.util.Timer;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import java.util.TimerTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"import shiba.Shiba;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.components.CommandInput;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.components.DialogBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.components.DialogNode;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.components.KeyInputHandler;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.components.SendButton;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" * Main JavaFX window for displaying the application UI.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":"public class MainWindow extends Application {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" public static final int WINDOW_WIDTH \u003d 600;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" public static final int WINDOW_HEIGHT \u003d 800;","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" private static final int WINDOW_HEIGHT_CORRECTION \u003d 40;","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" private static MainWindow singleton;","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" private DialogBox dialogBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" private Timer timer;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" private CommandInput userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" public void start(Stage primaryStage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" AnchorPane root \u003d new AnchorPane();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" primaryStage.setScene(new Scene(root));","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" // Dialog box","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" dialogBox \u003d new DialogBox();","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" root.getChildren().add(dialogBox);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" // Text input field","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" userInput \u003d new CommandInput();","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" root.getChildren().add(userInput);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" primaryStage.getScene().setOnKeyPressed(new KeyInputHandler(this::sendInput));","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" timer \u003d new Timer();","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" // Send button","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" Button sendButton \u003d new SendButton((event -\u003e sendInput()));","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" root.getChildren().add(sendButton);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" primaryStage.setTitle(Shiba.getInstance().getName());","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" primaryStage.setResizable(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" primaryStage.setMinHeight(WINDOW_HEIGHT + WINDOW_HEIGHT_CORRECTION);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" primaryStage.setMinWidth(WINDOW_WIDTH);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" primaryStage.show();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" if (singleton \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" singleton \u003d this;","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" System.out.println(\"Warning: Multiple instances of MainWindow detected!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" Shiba.getInstance().start();","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" * Adds a dialog node to the dialog box with the bot\u0027s reply.","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" * @param boxTexts Bot text nodes to be displayed in the dialog box","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" public void addBotDialogNode(ArrayList\u003cDialogNode.SubNode\u003e boxTexts) {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" dialogBox.addDialogNode(new DialogNode(false, boxTexts));","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" * Closes the UI window after 1.5s.","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" public void close() {","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":" timer.schedule(new TimerTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Bombbird2001"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Bombbird2001"},"content":" Platform.exit();","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Bombbird2001"},"content":" }, 1500);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Bombbird2001"},"content":" public Timer getTimer() {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Bombbird2001"},"content":" return timer;","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Bombbird2001"},"content":" * Cleans up the UI window, stopping any resources that may be preventing the program from terminating.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Bombbird2001"},"content":" public void cleanUp() {","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"Bombbird2001"},"content":" timer.cancel();","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"Bombbird2001"},"content":" * Gets the input in the text field box and sends it to the bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"Bombbird2001"},"content":" private void sendInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"Bombbird2001"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Bombbird2001"},"content":" if (input.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"Bombbird2001"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"Bombbird2001"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Bombbird2001"},"content":" ArrayList\u003cDialogNode.SubNode\u003e textNodes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"Bombbird2001"},"content":" textNodes.add(new DialogNode.SubNode(1, input));","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Bombbird2001"},"content":" dialogBox.addDialogNode(new DialogNode(true, textNodes));","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"Bombbird2001"},"content":" // Simulate a delay","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"Bombbird2001"},"content":" timer.schedule(new TimerTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"Bombbird2001"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"Bombbird2001"},"content":" Shiba.getInstance().processUserInput(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"Bombbird2001"},"content":" }, 1500);","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Bombbird2001"},"content":" * Returns the singleton instance of MainWindow.","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Bombbird2001"},"content":" * @return The singleton instance of MainWindow.","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Bombbird2001"},"content":" public static MainWindow getInstance() {","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Bombbird2001"},"content":" return singleton;","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Bombbird2001":134}},{"path":"src/main/java/shiba/ui/Replier.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.components.DialogNode;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" * Represents a class that prints messages to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"public class Replier {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" private static final ArrayList\u003cDialogNode.SubNode\u003e cumulativeSubNodes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" * Prints the greeting message.","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" public static void printGreeting(String botName) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" printWithNoIndents(\"Woof! I\u0027m \" + botName);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" printWithNoIndents(\"What can I bark at you?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" reply();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" * Prints the bye message","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" public static void printBye() {","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" printWithNoIndents(\"Woof! Hope to bark at you again soon!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" reply();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" * Prints the unknown command message.","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" public static void printUnknownCommand() {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" printWithNoIndents(\"Woof! I don\u0027t know what that command is!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" reply();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" * Prints the invalid command message.","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" * @param e The ShibaException whose message is to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" public static void printException(ShibaException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" printWithNoIndents(\"Woof! \" + e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" reply();","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" * Prints the given message with no indents.","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" public static void printWithNoIndents(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" printWithIndents(message, 0);","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" * Prints the given message with 1 indent.","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" public static void printWithOneIndent(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" printWithIndents(message, 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" * Prints the given message with the given number of indents (spaces).","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" * @param message The message to be printed.","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" * @param indents The number of indents.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" public static void printWithIndents(String message, int indents) {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" cumulativeSubNodes.add(new DialogNode.SubNode(indents, message));","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Bombbird2001"},"content":" * Sends the reply message stored in stringBuilder to the UI window to be displayed.","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Bombbird2001"},"content":" public static void reply() {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Bombbird2001"},"content":" MainWindow mainWindow \u003d MainWindow.getInstance();","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Bombbird2001"},"content":" if (mainWindow \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Bombbird2001"},"content":" return;","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Bombbird2001"},"content":" ArrayList\u003cDialogNode.SubNode\u003e nodesCopy \u003d new ArrayList\u003c\u003e(cumulativeSubNodes);","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Bombbird2001"},"content":" Platform.runLater(() -\u003e mainWindow.addBotDialogNode(nodesCopy));","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Bombbird2001"},"content":" cumulativeSubNodes.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"Bombbird2001":92}},{"path":"src/main/java/shiba/ui/components/CommandInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.ui.components;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.text.Font;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.MainWindow;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * Text input field for the user to enter commands.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public class CommandInput extends TextField {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" public static final int TEXT_FIELD_HEIGHT \u003d 50;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" private static final Font INPUT_FONT \u003d new Font(\"Arial\", 18);","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for CommandInput","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" public CommandInput() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" super();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" setPrefSize(MainWindow.WINDOW_WIDTH - SendButton.SEND_BUTTON_WIDTH - 3, TEXT_FIELD_HEIGHT);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" setFont(INPUT_FONT);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" AnchorPane.setBottomAnchor(this, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" AnchorPane.setLeftAnchor(this, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Bombbird2001":26}},{"path":"src/main/java/shiba/ui/components/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.ui.components;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.TimerTask;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"import shiba.ui.MainWindow;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" * Dialog box for displaying the conversation between the user and SHIBA-BOT.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"public class DialogBox extends ScrollPane {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" private final VBox dialogPane \u003d new VBox();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for DialogBox","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" public DialogBox() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" super();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" setPrefSize(MainWindow.WINDOW_WIDTH, MainWindow.WINDOW_HEIGHT - CommandInput.TEXT_FIELD_HEIGHT);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" setFitToWidth(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" dialogPane.setPrefHeight(Region.USE_COMPUTED_SIZE);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" setContent(dialogPane);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" * Adds a dialog node to the dialog box.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" * @param dialogNode Dialog node to be added","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" public void addDialogNode(DialogNode dialogNode) {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" dialogPane.getChildren().add(dialogNode);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" MainWindow mainWindow \u003d MainWindow.getInstance();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" if (mainWindow !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" mainWindow.getTimer().schedule(new TimerTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" Platform.runLater(() -\u003e setVvalue(1.0));","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" }, 100);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Bombbird2001":49}},{"path":"src/main/java/shiba/ui/components/DialogNode.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.ui.components;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import javafx.geometry.Insets;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.text.Font;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" * Represents a dialog node in the dialog box, which can be directly added to a parent.","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"public class DialogNode extends HBox {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" private static final Image USER_IMAGE \u003d new Image(DialogNode.class.getResourceAsStream(\"/images/user.jpg\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" private static final Image SHIBA_IMAGE \u003d new Image(DialogNode.class.getResourceAsStream(\"/images/shiba.png\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" private static final Font DIALOG_FONT \u003d new Font(\"Comic Sans MS\", 18);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" private static final int IMAGE_SIZE \u003d 150;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" private static final int TEXT_PORTION_WIDTH \u003d 410;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" private static final int HORIZONTAL_SPACING \u003d 10;","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" private static final int VERTICAL_SPACING \u003d 5;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" * Represents a sub-node inside this DialogNode","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" public static class SubNode {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" public static final int INDENTATION_WIDTH \u003d 20;","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" private static final int MAX_INDENTATION_LEVEL \u003d TEXT_PORTION_WIDTH / 2 / INDENTATION_WIDTH;","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" private final int indentationLevel;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" private final String text;","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for SubNode","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" * @param indentationLevel Indentation level of the sub-node, capped at a maximum value","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" * @param text Text to be displayed","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" public SubNode(int indentationLevel, String text) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" this.indentationLevel \u003d Math.min(indentationLevel, MAX_INDENTATION_LEVEL);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":" this.text \u003d text;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for DialogNode","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" * @param isUser Whether the dialog node is from the user - determines the image that will be displayed","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" * @param textNodes List of sub-nodes to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" public DialogNode(boolean isUser, ArrayList\u003cSubNode\u003e textNodes) {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":" super(HORIZONTAL_SPACING);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" ImageView imageView \u003d new ImageView(isUser ? USER_IMAGE : SHIBA_IMAGE);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" imageView.setFitHeight(IMAGE_SIZE);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" imageView.setFitWidth(IMAGE_SIZE);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":" VBox vbox \u003d new VBox(VERTICAL_SPACING);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" vbox.setPrefWidth(TEXT_PORTION_WIDTH);","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" if (isUser) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" getChildren().addAll(vbox, imageView);","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":" getChildren().addAll(imageView, vbox);","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Bombbird2001"},"content":" for (SubNode textNode : textNodes) {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Bombbird2001"},"content":" Label textLabel \u003d new Label(textNode.text);","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Bombbird2001"},"content":" textLabel.setWrapText(true);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Bombbird2001"},"content":" textLabel.setFont(DIALOG_FONT);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Bombbird2001"},"content":" textLabel.setPrefWidth(TEXT_PORTION_WIDTH - textNode.indentationLevel * SubNode.INDENTATION_WIDTH);","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Bombbird2001"},"content":" textLabel.setPadding(new Insets(0, 0, 0, textNode.indentationLevel * SubNode.INDENTATION_WIDTH));","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Bombbird2001"},"content":" vbox.getChildren().add(textLabel);","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Bombbird2001":78}},{"path":"src/main/java/shiba/ui/components/KeyInputHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.ui.components;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import javafx.event.EventHandler;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.input.KeyCode;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.input.KeyEvent;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" * Handles key input from the user.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public class KeyInputHandler implements EventHandler\u003cKeyEvent\u003e {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" private final Runnable onEnter;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for KeyInputHandler.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" * @param onEnter The action to be performed when the user presses the enter key.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" public KeyInputHandler(Runnable onEnter) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" this.onEnter \u003d onEnter;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" public void handle(KeyEvent event) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" if (KeyEvent.KEY_PRESSED.equals(event.getEventType())) {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" if (event.getCode() \u003d\u003d KeyCode.ENTER) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" onEnter.run();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Bombbird2001":33}},{"path":"src/main/java/shiba/ui/components/SendButton.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.ui.components;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import javafx.event.EventHandler;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.input.MouseEvent;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":" * Button for sending user input to SHIBA-BOT.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"public class SendButton extends Button {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" public static final int SEND_BUTTON_WIDTH \u003d 100;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" private static final String BUTTON_TEXT \u003d \"Send\";","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" * Constructor for SendButton","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" public SendButton(EventHandler\u003cMouseEvent\u003e onMouseClicked) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" super(BUTTON_TEXT);","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" setPrefSize(SEND_BUTTON_WIDTH, CommandInput.TEXT_FIELD_HEIGHT);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" AnchorPane.setBottomAnchor(this, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" AnchorPane.setRightAnchor(this, 1.0);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" setOnMouseClicked(onMouseClicked);","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Bombbird2001":27}},{"path":"src/test/java/shiba/commands/TodoCommandTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.commands;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.ShibaException;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.PersistentTaskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"import shiba.tasks.TaskListStub;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"public class TodoCommandTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" private final PersistentTaskList tasks \u003d new TaskListStub();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" public void execute_validCommand() throws ShibaException {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" new TodoCommand(tasks, \"todo Pet a Shiba\").execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"[T][ ] Pet a Shiba\", tasks.get(0).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" public void execute_validCommand_spaces() throws ShibaException {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" new TodoCommand(tasks, \"todo Pet a Shiba \").execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(1, tasks.size());","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"[T][ ] Pet a Shiba \", tasks.get(0).toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" public void execute_invalidCommand_noName() {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new TodoCommand(tasks, \"todo\").execute());","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" public void execute_invalidCommand_wrongCommand() {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new TodoCommand(tasks, \"mark\").execute());","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Bombbird2001":39}},{"path":"src/test/java/shiba/datetimeformats/DateOptionalTimeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.datetimeformats;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"import shiba.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"public class DateOptionalTimeTest {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormat_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-08-28T20:31\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"2023-08-28T20:31\", dateOptionalTime.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormatNoT_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-08-28 20:34\");","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"2023-08-28T20:34\", dateOptionalTime.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoDateOnly_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-08-10\");","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"2023-08-10\", dateOptionalTime.toString());","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormat_invalid1() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new DateOptionalTime(\"2023-28-08T20:31\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormat_invalid2() {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new DateOptionalTime(\"2023-08 28T20:31\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormatNoT_invalid1() {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new DateOptionalTime(\"2023-28-08 20:31\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"Bombbird2001"},"content":" public void constructor_isoFormatNoT_invalid2() {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Bombbird2001"},"content":" assertThrows(InvalidCommandException.class, () -\u003e new DateOptionalTime(\"2023 08 28 20:31\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Bombbird2001"},"content":" public void getDisplayRestr_isoFormat_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-08-28T20:31\");","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"28 Aug 2023 8:31PM\", dateOptionalTime.getDisplayRepr());","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Bombbird2001"},"content":" public void getDisplayRestr_isoFormatNoT_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-06-14 10:00\");","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"14 Jun 2023 10:00AM\", dateOptionalTime.getDisplayRepr());","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Bombbird2001"},"content":" @Test","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Bombbird2001"},"content":" public void getDisplayRestr_isoDateOnly_success() throws InvalidCommandException {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Bombbird2001"},"content":" DateOptionalTime dateOptionalTime \u003d new DateOptionalTime(\"2023-02-01\");","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Bombbird2001"},"content":" assertEquals(\"1 Feb 2023\", dateOptionalTime.getDisplayRepr());","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Bombbird2001":66}},{"path":"src/test/java/shiba/tasks/TaskListStub.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"package shiba.tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":" * Represents a stub for a persistent task list, which will not perform saving or loading of data from file.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"public class TaskListStub implements PersistentTaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":" private final ArrayList\u003cShibaTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":" public void addTask(ShibaTask task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":" public ShibaTask removeIndex(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":" public ShibaTask get(int index) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":" return tasks.get(index);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":" public int size() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Bombbird2001"},"content":" return tasks.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Bombbird2001"},"content":" public void save() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Bombbird2001"},"content":" // This stub will not save to file","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Bombbird2001"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Bombbird2001"},"content":" public List\u003cShibaTask\u003e findTasksWithKeyword(String keyword) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Bombbird2001"},"content":" return new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Bombbird2001"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Bombbird2001"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Bombbird2001":41}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Bombbird2001"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Bombbird2001"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Bombbird2001"},"content":"todo Do tutorials","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"Bombbird2001"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"Bombbird2001"},"content":"deadline Prepare for CA1 /by 14 Sept","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Bombbird2001"},"content":"deadline Prepare for CA1 /by 2023-09-14","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Bombbird2001"},"content":"event VATSIM Ho Chih Minh - Singapore SeaLink /from 23 Sept 8pm /to 12am","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Bombbird2001"},"content":"event VATSIM Ho Chih Minh - Singapore SeaLink /from 2023-09-23 20:00 /to 2023-09-24 00:00","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"Bombbird2001"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Bombbird2001"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"unmark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Bombbird2001"},"content":"unmark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Bombbird2001"},"content":"mark ierfgheiurh","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Bombbird2001"},"content":"mark 0","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Bombbird2001"},"content":"unmark 999","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Bombbird2001"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Bombbird2001"},"content":"some weird command","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"Bombbird2001"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"Bombbird2001"},"content":"deadline /by 14 Sept","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"Bombbird2001"},"content":"event Random event /from 2023-09-17 20:00","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"Bombbird2001"},"content":"delete -1","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Bombbird2001"},"content":"delete 2","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"Bombbird2001"},"content":"find","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Bombbird2001"},"content":"find TUTORIAL","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Bombbird2001"},"content":"find Minecraft","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Bombbird2001"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Bombbird2001":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":"Bombbird2001"},"content":"REM delete saved data folder","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"Bombbird2001"},"content":"if exist shibaData rmdir shibaData /s /q","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"Bombbird2001"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"Bombbird2001"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\shiba\\*.java","lastModifiedDate":"2023-08-27"},{"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":"Bombbird2001"},"content":"java -classpath ..\\bin shiba.Shiba \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-29"},{"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":{"-":19,"Bombbird2001":5}}] diff --git a/Bombbird2001_ip_master/commits.json b/Bombbird2001_ip_master/commits.json index 4867f020..c911f201 100644 --- a/Bombbird2001_ip_master/commits.json +++ b/Bombbird2001_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Bombbird2001":[{"date":"2023-08-21","commitResults":[{"hash":"1005f73546e87efa73c0860a19d824f1e038306a","isMergeCommit":false,"messageTitle":"Level-0 changes","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"9a31dff466d2d4223aa9f7a82e3807f6f358f24a","isMergeCommit":false,"messageTitle":"Level-1 changes","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":3}}},{"hash":"b234c09eb33ed99e7508fba8871577a7262e930f","isMergeCommit":false,"messageTitle":"Level-2 changes","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":12}}}]},{"date":"2023-08-22","commitResults":[{"hash":"1f988ed7f5146e76fde07b27647ae67a221caf0f","isMergeCommit":false,"messageTitle":"Level-3 changes","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":8}}},{"hash":"1e64293b45610814f2c1d49567f333a388274068","isMergeCommit":false,"messageTitle":"Level-4 changes","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":242,"deletions":27}}},{"hash":"57d52cc5abf3f839beb6dbda7ab7e01b097f7995","isMergeCommit":false,"messageTitle":"TextUiTesting changes","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":2,"deletions":1}}},{"hash":"6b8e55169c13c5d4330c580da7abd1969fad455b","isMergeCommit":false,"messageTitle":"Level-5 changes","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":70,"deletions":57}}},{"hash":"942c5deb537ed759cf411bf7b4a10d97631ff710","isMergeCommit":false,"messageTitle":"Level-6 changes","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":140,"deletions":100}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9efc4502d625991a0fa66f9882711249fed97cfb","isMergeCommit":false,"messageTitle":"Enum changes","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":41}}}]},{"date":"2023-08-26","commitResults":[{"hash":"f040392dbce3eef9fe940c9e267f981aea772d28","isMergeCommit":false,"messageTitle":"Add saving \u0026 loading of tasks to/from disk file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":298,"deletions":33}}},{"hash":"5f18440785d73f41945c10122d1d039c953d4e4f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ec33ed10c23ad9524de74ba13bf6e99c5a1fa1c3","isMergeCommit":false,"messageTitle":"Add datetime or date formats for deadlines, events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":27}}},{"hash":"10e90417b218c78c0dab39408bc47c6a15a07bd3","isMergeCommit":false,"messageTitle":"Update tests to account for datetime input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":0,"deletions":2},"bat":{"insertions":3,"deletions":0}}},{"hash":"c9542cfa966a1f05a31ddc0f4d97cd887d5e8479","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"d5da861bc054f02ced6c95272eb2f404838ed48d","isMergeCommit":false,"messageTitle":"Extract classes to parser, UI, command, storage categories","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":550,"deletions":339},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"56b6a6728beff898718da6ef6df4a88d4fbf1376","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"0d1b91f49456a425f8c3c1fa49443d7ab9137f91","isMergeCommit":false,"messageTitle":"Move all classes to packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":74},"bat":{"insertions":1,"deletions":1}}},{"hash":"0baafd5a382353c95dccc43b9cb1085c9b6f7439","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"30373992f61849fdda518391bb9e2680a2c5d6c1","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c9fb66fb6447ea05c4d0a87fcd5457a47e070205","isMergeCommit":false,"messageTitle":"Add gradle, with junit enabled","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3},"java":{"insertions":12,"deletions":0}}},{"hash":"817faed65b1bd175718f66245846738dddbee28c","isMergeCommit":false,"messageTitle":"Add tests for DateOptionalTime class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":3}}},{"hash":"214bf4c48a498439fb9cd00075a5333f7c81b97e","isMergeCommit":false,"messageTitle":"Add tests for TodoCommand class","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":48}}},{"hash":"095dd24a3eb26713708c342c99a4496d3685a470","isMergeCommit":false,"messageTitle":"Update jar name","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b7b09b6fca4a2ee8241857c0fe9ec532f9d04356","isMergeCommit":false,"messageTitle":"Update some method JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"fa0b03b417a63f3d84bd84d7bfdc45d53d3359d7","isMergeCommit":false,"messageTitle":"Add line breaks for long lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"189c82ef22e36c6b3f687c3ef2d02b3791521f13","isMergeCommit":false,"messageTitle":"Add support for find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":1}}},{"hash":"3c90b79e300e651844a09a9e06dcd9787a4a8398","isMergeCommit":false,"messageTitle":"Add automated test for find command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"ea0e55e34219e63b6017f4f579fd1617d24de59a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2d6d8bdca9ad7f71f919396d2955125f8db76ed7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"52942ca8a590844e58f13113127fdccdc0788c85","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/shiba/tasks/PersistentTaskList.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"421bd24f1ca4788d18f140a3d340299b79506a22","isMergeCommit":false,"messageTitle":"Fixed checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":277,"deletions":109}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9e73a7438908f0f52b515e31e368d67fbbc330fc","isMergeCommit":false,"messageTitle":"Add checkstyle version; checkstyle violations have been fixed earlier","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"Bombbird2001":{"java":1459,"md":2,"fxml":0,"sh":0,"bat":5,"gradle":7,"txt":28}},"authorContributionVariance":{"Bombbird2001":90650.805},"authorDisplayNameMap":{"Bombbird2001":"CS2103T-W13-3 KU S..G YI"}} +{"authorDailyContributionsMap":{"Bombbird2001":[{"date":"2023-08-21","commitResults":[{"hash":"1005f73546e87efa73c0860a19d824f1e038306a","isMergeCommit":false,"messageTitle":"Level-0 changes","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":6}}},{"hash":"9a31dff466d2d4223aa9f7a82e3807f6f358f24a","isMergeCommit":false,"messageTitle":"Level-1 changes","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":3}}},{"hash":"b234c09eb33ed99e7508fba8871577a7262e930f","isMergeCommit":false,"messageTitle":"Level-2 changes","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":61,"deletions":12}}}]},{"date":"2023-08-22","commitResults":[{"hash":"1f988ed7f5146e76fde07b27647ae67a221caf0f","isMergeCommit":false,"messageTitle":"Level-3 changes","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":8}}},{"hash":"1e64293b45610814f2c1d49567f333a388274068","isMergeCommit":false,"messageTitle":"Level-4 changes","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":242,"deletions":27}}},{"hash":"57d52cc5abf3f839beb6dbda7ab7e01b097f7995","isMergeCommit":false,"messageTitle":"TextUiTesting changes","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":14,"deletions":0},"java":{"insertions":2,"deletions":1}}},{"hash":"6b8e55169c13c5d4330c580da7abd1969fad455b","isMergeCommit":false,"messageTitle":"Level-5 changes","messageBody":"","tags":["Level-5","A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":70,"deletions":57}}},{"hash":"942c5deb537ed759cf411bf7b4a10d97631ff710","isMergeCommit":false,"messageTitle":"Level-6 changes","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":140,"deletions":100}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9efc4502d625991a0fa66f9882711249fed97cfb","isMergeCommit":false,"messageTitle":"Enum changes","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":41}}}]},{"date":"2023-08-26","commitResults":[{"hash":"f040392dbce3eef9fe940c9e267f981aea772d28","isMergeCommit":false,"messageTitle":"Add saving \u0026 loading of tasks to/from disk file","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":298,"deletions":33}}},{"hash":"5f18440785d73f41945c10122d1d039c953d4e4f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"ec33ed10c23ad9524de74ba13bf6e99c5a1fa1c3","isMergeCommit":false,"messageTitle":"Add datetime or date formats for deadlines, events","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":97,"deletions":27}}},{"hash":"10e90417b218c78c0dab39408bc47c6a15a07bd3","isMergeCommit":false,"messageTitle":"Update tests to account for datetime input","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":1},"java":{"insertions":0,"deletions":2},"bat":{"insertions":3,"deletions":0}}},{"hash":"c9542cfa966a1f05a31ddc0f4d97cd887d5e8479","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"d5da861bc054f02ced6c95272eb2f404838ed48d","isMergeCommit":false,"messageTitle":"Extract classes to parser, UI, command, storage categories","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":550,"deletions":339},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"56b6a6728beff898718da6ef6df4a88d4fbf1376","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"0d1b91f49456a425f8c3c1fa49443d7ab9137f91","isMergeCommit":false,"messageTitle":"Move all classes to packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":74},"bat":{"insertions":1,"deletions":1}}},{"hash":"0baafd5a382353c95dccc43b9cb1085c9b6f7439","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"30373992f61849fdda518391bb9e2680a2c5d6c1","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c9fb66fb6447ea05c4d0a87fcd5457a47e070205","isMergeCommit":false,"messageTitle":"Add gradle, with junit enabled","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":3},"java":{"insertions":12,"deletions":0}}},{"hash":"817faed65b1bd175718f66245846738dddbee28c","isMergeCommit":false,"messageTitle":"Add tests for DateOptionalTime class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":68,"deletions":3}}},{"hash":"214bf4c48a498439fb9cd00075a5333f7c81b97e","isMergeCommit":false,"messageTitle":"Add tests for TodoCommand class","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":48}}},{"hash":"095dd24a3eb26713708c342c99a4496d3685a470","isMergeCommit":false,"messageTitle":"Update jar name","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-29","commitResults":[{"hash":"b7b09b6fca4a2ee8241857c0fe9ec532f9d04356","isMergeCommit":false,"messageTitle":"Update some method JavaDocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":3}}},{"hash":"fa0b03b417a63f3d84bd84d7bfdc45d53d3359d7","isMergeCommit":false,"messageTitle":"Add line breaks for long lines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"189c82ef22e36c6b3f687c3ef2d02b3791521f13","isMergeCommit":false,"messageTitle":"Add support for find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":1}}},{"hash":"3c90b79e300e651844a09a9e06dcd9787a4a8398","isMergeCommit":false,"messageTitle":"Add automated test for find command","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"ea0e55e34219e63b6017f4f579fd1617d24de59a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"2d6d8bdca9ad7f71f919396d2955125f8db76ed7","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"52942ca8a590844e58f13113127fdccdc0788c85","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/shiba/tasks/PersistentTaskList.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"421bd24f1ca4788d18f140a3d340299b79506a22","isMergeCommit":false,"messageTitle":"Fixed checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":277,"deletions":109}}}]},{"date":"2023-09-03","commitResults":[{"hash":"9e73a7438908f0f52b515e31e368d67fbbc330fc","isMergeCommit":false,"messageTitle":"Add checkstyle version; checkstyle violations have been fixed earlier","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0}}},{"hash":"a59785dbe0bcbe4925123c6420fa584d136a171f","isMergeCommit":false,"messageTitle":"Add initial layout for UI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":0},"java":{"insertions":119,"deletions":2}}},{"hash":"854d1fb1a15d760f572336bcd541ac86430eed9e","isMergeCommit":false,"messageTitle":"Implement full UI including user input, bot response","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":290,"deletions":123}}},{"hash":"2d81d81bdc9f2e3e36b6cb3728384a5be5fee4e0","isMergeCommit":false,"messageTitle":"Fix checkstyle violations, prevent user from sending empty input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":34}}}]},{"date":"2023-09-04","commitResults":[{"hash":"742d457337924e67e9f2c6e1ff12311aaf692c61","isMergeCommit":false,"messageTitle":"Print start message only after window startup","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":10}}},{"hash":"0f26a04e4ba8b881c391362fe3a8b044bace50ae","isMergeCommit":false,"messageTitle":"Remove unnecessary thread","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"059ea0fb7dcaf023f60adef6453a90b7418339ea","isMergeCommit":false,"messageTitle":"Add pat, bellyrub commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":10}}},{"hash":"a107684abdcb9788bd97a596b622b495a1b02a52","isMergeCommit":false,"messageTitle":"Change wildcard import for coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"41adbfcec44476c85443fcc0daee4055ae3fa270","isMergeCommit":false,"messageTitle":"Add better indentation for different text; add press enter to send command","messageBody":"","tags":["Level-10"],"fileTypesAndContributionMap":{"java":{"insertions":149,"deletions":84}}},{"hash":"f43746da545f5bbadad9eaf6bf9e463267f8a6c5","isMergeCommit":false,"messageTitle":"Add missing inheritdoc to overriding methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":1}}},{"hash":"19a7e79a3592aa23273570f121b1f86aececcbcf","isMergeCommit":false,"messageTitle":"Fix program not ending when closed using close button","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":1}}},{"hash":"beaa537837d059b2406e67fcbc71db65a63a1e49","isMergeCommit":false,"messageTitle":"Update README.md; varargs have already been added in an earlier commit","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":3,"deletions":11}}},{"hash":"9b31b23836ce12d9c57280f9d10d11e29e33da00","isMergeCommit":false,"messageTitle":"Change gradle to build with Java 11","messageBody":"","tags":["v1.1"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":0},"java":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"Bombbird2001":{"java":1936,"md":3,"fxml":0,"sh":0,"bat":5,"gradle":17,"txt":28}},"authorContributionVariance":{"Bombbird2001":94804.61},"authorDisplayNameMap":{"Bombbird2001":"CS2103T-W13-3 KU S..G YI"}} diff --git a/CelestineTan03_ip_master/authorship.json b/CelestineTan03_ip_master/authorship.json index 67d0efba..3a0e1ff5 100644 --- a/CelestineTan03_ip_master/authorship.json +++ b/CelestineTan03_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"CelestineTan03"},"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":"CelestineTan03"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"CelestineTan03":2,"-":41}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type Deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" private final LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter formatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task of type Deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * @param by the deadline for the task","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task in file format.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" return \"D | \" + this.isDone + \" | \" + this.description + \" | \" + this.by.format(formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" * Return the task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" return \"deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":56}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.*;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" * A chatbot that provides a to-do list function","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the chatbot","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" * Run the chatbot","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" this.ui.printGreeting();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" // Only exit when user types the command bye","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" label:","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" while (true) {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" if (sc.hasNextLine()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" Parser parser \u003d new Parser(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" String firstWord \u003d parser.getCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" switch (firstWord) {","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" case \"bye\":","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" this.storage.saveTasks(this.tasks.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" this.ui.printFarewell();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" sc.close();","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" break label;","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" // Display the stored commands","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" case \"list\":","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.getNumberOfTasks() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"You do not have any tasks in the list.\");","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" for (int i \u003d 0; i \u003c this.tasks.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(i + 1 + \".\" + this.tasks.getTasks().get(i).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" // Add task","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.addTask(parser.getTodoTask(), \"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.addTask(parser.getDeadlineTask(), \"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.addTask(parser.getEventTask(), \"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" // Mark task as done","lastModifiedDate":"2023-08-21"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" case \"mark\":","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.markTask(parser.getTaskNumber(), \"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" // Mark task as not done","lastModifiedDate":"2023-08-21"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-21"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.markTask(parser.getTaskNumber(), \"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"CelestineTan03"},"content":" // Remove task","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"CelestineTan03"},"content":" case \"delete\":","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":104,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.removeTask(parser.getTaskNumber());","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":108,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":109,"author":{"gitId":"CelestineTan03"},"content":" // Find task","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"CelestineTan03"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.findTask(parser.getSearchKeyword());","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"CelestineTan03"},"content":" // Invalid command","lastModifiedDate":"2023-08-21"},{"lineNumber":118,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-21"},{"lineNumber":119,"author":{"gitId":"CelestineTan03"},"content":" this.ui.printAllCommands();","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":122,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":125,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"CelestineTan03"},"content":" * The main method to run the chatbot","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"CelestineTan03"},"content":" * @param args the command line arguments","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"CelestineTan03"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"CelestineTan03"},"content":" new Duke(\"./duke.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"CelestineTan03":131,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a DukeException","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for DukeException","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * @param exception the type of exception","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" public DukeException(ExceptionTypes exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" super(exception.getErrormessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"CelestineTan03":15}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type Event","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter formatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for task of type Event","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" * @param from the start date/time for the task","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * @param to the end date/time for the task","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(formatter) + \" to: \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" this.to.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task in file format.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" return \"E | \" + this.isDone + \" | \" + this.description + \" | \" + this.from.format(formatter) +","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" \" | \" + this.to.format(formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" * Return the task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" return \"event\";","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":60}},{"path":"src/main/java/duke/ExceptionTypes.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents the types of exceptions","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public enum ExceptionTypes {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMANDEVENT(\"OOPS!!! Invalid command. The command for an event should be:\\nevent \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDEVENT(\"OOPS!!! The description of an event cannot be empty and the start and end time/date cannot be empty.\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMANDDEADLINE(\"OOPS!!! Invalid command. The command for a deadline should be:\\ndeadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\"),","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDDEADLINE(\"OOPS!!! The description of a deadline cannot be empty and the deadline for the deadline cannot be empty.\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDTODO(\"OOPS!!! The description of a todo cannot be empty.\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" INVALIDTASKNUMBER(\"OOPS!! Invalid task number. The task number has to be from one to the number of tasks in the list.\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETETASKNUMBER(\"OOPS!! Task number cannot empty. Please indicate a task number from one to the number of tasks in the list.\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" MARKEMPTYLIST(\"Add task to start marking task as done!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" UNMARKEMPTYLIST(\"Add task to start marking task as not done!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" DELETEEMPTYLIST(\"Add task to start deleting!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMAND(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" EMPTYKEYWORD(\"OOPS!!! Please enter something to search.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" private final String errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" ExceptionTypes(String errormessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" this.errormessage \u003d errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" // A method to get the error message of the exception","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" public String getErrormessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" return this.errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"CelestineTan03":31}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a parser that parses the user input","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" private String[] words;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a parser","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" * @param input the user input","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" public Parser(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" // Split string into first word and remaining words","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" this.words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * Return the command word of the user input","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" * @return the command word","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" return this.words[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" public String[] getTodoTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDTODO);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" return this.words;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" * Return the description of the deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" * @return the description of the deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" public String[] getDeadlineTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" } else if (this.words[1].contains(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" String[] description \u003d this.words[1].split(\" /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" if (description.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * Return the description of the event task","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" * @return the description of the event task","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" public String[] getEventTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" } else if (this.words[1].contains(\"/from\") \u0026\u0026 this.words[1].contains(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" String[] description \u003d this.words[1].split(\" /from \");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" if (description.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" String[] interval \u003d description[1].split(\" /to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" if (interval.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" return new String[]{description[0], interval[0], interval[1]};","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" * Return the task number of the task to be marked as done or deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" * @return the task number","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" public int getTaskNumber() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETETASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" return Integer.parseInt(words[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" public String getSearchKeyword() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.EMPTYKEYWORD);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" return this.words[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":98}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" * Represents a storage for the chatbot","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" private final String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter outputFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" * @param filePath the path to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" this.path \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" this.outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" // Create file if file does not exist","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" if (!file.createNewFile()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" this.load();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" * Save the tasks to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" * @throws IOException if there is an error writing to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" public void saveTasks(List\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" FileWriter writer \u003d new FileWriter(this.path);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" writer.write(task.toFileFormat() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * Load the tasks from the file","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" * @return the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" * @throws IOException if there is an error reading from the file","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" public List\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(this.path));","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" String nextTask \u003d reader.readLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" while (nextTask !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" String[] taskDescription \u003d nextTask.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" String isDone \u003d taskDescription[1].strip();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" String description \u003d taskDescription[2].strip();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" switch (taskDescription[0].strip()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Todo(description));","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Deadline(description,","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" LocalDateTime.parse(taskDescription[3].strip(), this.outputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Event(description, LocalDateTime.parse(taskDescription[3].strip(),","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" this.outputFormatter), LocalDateTime.parse(taskDescription[4].strip(), this.outputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" if (isDone.equals(\"true\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" int index \u003d tasks.size() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" nextTask \u003d reader.readLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" reader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":94}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" * Check if the task has been completed and","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" * return the status icon of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" * @return the status icon of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" return(isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" // Mark a task as done","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" // Mark a task as not done","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task in file format.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" abstract String toFileFormat();","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" * Return the type of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" * @return the type of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" abstract String getTaskType();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":63}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter inputFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the task list if an initial list exist","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" this.inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the task list if an initial list does not exist","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" this.inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" * @return the number of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" * @return the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" * Returns a success message when a task has been successfully added.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" * @return the success message","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" public String printAddTaskSuccessMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.get(this.tasks.size() - 1).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Now you have \");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" return message.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" * Returns a success message when a task has been successfully deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" * @return the success message","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" public String printRemoveTaskSuccessMessage(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" message.append(task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Now you have \");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" return message.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the task details and add the task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" * @param task the task description","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" * @param typeOfTask the type of the task to be added","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" public void addTask(String[] task, String typeOfTask) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" switch (typeOfTask) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Event(task[0], LocalDateTime.parse(task[1], this.inputFormatter),","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" LocalDateTime.parse(task[2], this.inputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(printAddTaskSuccessMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Todo(task[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(printAddTaskSuccessMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Deadline(task[0], LocalDateTime.parse(task[1], this.inputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(printAddTaskSuccessMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the command to delete a task","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"CelestineTan03"},"content":" * and remove the task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"CelestineTan03"},"content":" * @param taskNumber the task number of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"CelestineTan03"},"content":" public void removeTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.DELETEEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"CelestineTan03"},"content":" Task task \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(printRemoveTaskSuccessMessage(task));","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the task command to mark or unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"CelestineTan03"},"content":" * a task and mark the task as done or mark a task as","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"CelestineTan03"},"content":" * not done","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"CelestineTan03"},"content":" * @param taskNumber the task number of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"CelestineTan03"},"content":" * @param action to mark or unmark the task","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"CelestineTan03"},"content":" public void markTask(int taskNumber, String action) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"CelestineTan03"},"content":" switch(action) {","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"CelestineTan03"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.MARKEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"CelestineTan03"},"content":" Task markTask \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"CelestineTan03"},"content":" markTask.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(markTask.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"CelestineTan03"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.UNMARKEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"CelestineTan03"},"content":" Task unmarkTask \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"CelestineTan03"},"content":" unmarkTask.markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(unmarkTask.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"CelestineTan03"},"content":" public void findTask(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"There are no matching tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"CelestineTan03"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"CelestineTan03"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"CelestineTan03"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"CelestineTan03"},"content":" if (task.toString().contains(keyword) || task.getTaskType().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"CelestineTan03"},"content":" if (count \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Here are the matching task(s) in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(count + \". \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"CelestineTan03"},"content":" count++;","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"CelestineTan03"},"content":" if (count \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"There are no matching tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":199}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type todo","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task of type todo","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task in file format.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" return \"T | \" + this.isDone + \" | \" + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" * Return the task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" return \"todo\";","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":46}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" // Print the greeting message","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" public void printGreeting() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Hello! I\u0027m Botty!\\nWhat can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" // Print the farewell message","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" public void printFarewell() {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" // Print all the available commands","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" public void printAllCommands() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"OOPS!!! Invalid command. Try the following commands instead:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e todo \u003ctask\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e deadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e event \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e mark \u003ctask number\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e unmark \u003ctask number\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e delete \u003ctask number\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e find \u003ckeyword\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e bye\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":27}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" * Represents a test for Parser class","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" public void testGetCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"todo\", new Parser(\"todo sleep\").getCommand());","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" public void testGetTodoTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"todo\"}, new Parser(\"todo\").getTodoTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" public void testIncompleteCommandDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"deadline\"}, new Parser(\"deadline\").getDeadlineTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of a deadline cannot be empty and\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" \" the deadline for the deadline cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" public void testInvalidCommandDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"deadline\", \"sleep\"}, new Parser(\"deadline sleep /by\").getDeadlineTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! Invalid command. The command for a deadline should be:\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" \"deadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" public void testIncompleteCommandEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"event\"}, new Parser(\"event\").getEventTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of an event cannot be empty and the start\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" \" and end time/date cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" public void testInvalidCommandEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"event\", \"sleep\"}, new Parser(\"event sleep /from\").getEventTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! Invalid command. The command for an event should be:\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" \"event \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":69}},{"path":"src/test/java/duke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" * Represents a test for Todo class","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" public void testToStringConversion() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"[T][ ] sleep\", new Todo(\"sleep\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" public void testToFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"T | false | sleep\", new Todo(\"sleep\").toFileFormat());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"todo sleep","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"event meeting /from 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"event meeting /from 2023-10-10 14:00 /to 2023-10-10 16:00","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"deadline lecture quiz /by 9pm","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"deadline lecture quiz /by 2023-10-05 23:59","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"find","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"find sleep","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"mark","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"mark -2","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":"unmark 10","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":"unmark","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"delete -4","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":"delete","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":"add task","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"CelestineTan03":26}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"# delete stored data from previous run","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"if [ -e \"./duke.txt\" ]","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"then","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" rm ./duke.txt","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"fi","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":"java -classpath ../bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"CelestineTan03":8,"-":36}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"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":"CelestineTan03"},"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":"CelestineTan03"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"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":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"CelestineTan03":7,"-":41}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type Deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" private final LocalDateTime by;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter formatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task of type Deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * @param by the deadline for the task","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" public Deadline(String description, LocalDateTime by) {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task in file format.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" return \"D | \" + this.isDone + \" | \" + this.description + \" | \" + this.by.format(formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" * Return the task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" return \"deadline\";","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":56}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" * A chatbot that provides a to-do list function","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the chatbot","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" * Run the chatbot","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" this.ui.printGreeting();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" // Only exit when user types the command bye","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" label:","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" while (true) {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" if (sc.hasNextLine()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" Parser parser \u003d new Parser(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" String firstWord \u003d parser.getCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" switch (firstWord) {","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" case \"bye\":","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" this.storage.saveTasks(this.tasks.getTasks());","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" this.ui.printFarewell();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" sc.close();","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" break label;","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" // Display the stored commands","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" case \"list\":","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.getNumberOfTasks() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"You do not have any tasks in the list.\");","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" for (int i \u003d 0; i \u003c this.tasks.getNumberOfTasks(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(i + 1 + \".\" + this.tasks.getTasks().get(i).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" // Add task","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.addTask(parser.getTodoTask(), \"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.addTask(parser.getDeadlineTask(), \"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-08-21"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.addTask(parser.getEventTask(), \"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" // Mark task as done","lastModifiedDate":"2023-08-21"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" case \"mark\":","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.markTask(parser.getTaskNumber(), \"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" // Mark task as not done","lastModifiedDate":"2023-08-21"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-21"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.markTask(parser.getTaskNumber(), \"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":99,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":101,"author":{"gitId":"CelestineTan03"},"content":" // Remove task","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"CelestineTan03"},"content":" case \"delete\":","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":104,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.removeTask(parser.getTaskNumber());","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":107,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":108,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":109,"author":{"gitId":"CelestineTan03"},"content":" // Find task","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"CelestineTan03"},"content":" case \"find\":","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.findTask(parser.getSearchKeyword());","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"CelestineTan03"},"content":" // Invalid command","lastModifiedDate":"2023-08-21"},{"lineNumber":118,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-21"},{"lineNumber":119,"author":{"gitId":"CelestineTan03"},"content":" this.ui.printAllCommands();","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":122,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":125,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"CelestineTan03"},"content":" * The main method to run the chatbot","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"CelestineTan03"},"content":" * @param args the command line arguments","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"CelestineTan03"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"CelestineTan03"},"content":" new Duke(\"./duke.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"CelestineTan03":131,"-":3}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a DukeException","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for DukeException","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * @param exception the type of exception","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" public DukeException(ExceptionTypes exception) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" super(exception.getErrormessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"CelestineTan03":15}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type Event","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter formatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for task of type Event","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" * @param from the start date/time for the task","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * @param to the end date/time for the task","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" public Event(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" this.formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(formatter) + \" to: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task in file format.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" return \"E | \" + this.isDone + \" | \" + this.description + \" | \" + this.from.format(formatter)","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" + \" | \" + this.to.format(formatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" * Return the task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" return \"event\";","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":60}},{"path":"src/main/java/duke/ExceptionTypes.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents the types of exceptions","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public enum ExceptionTypes {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMANDEVENT(\"OOPS!!! Invalid command. The command for an event should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" + \"event \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDEVENT(\"OOPS!!! The description of an event cannot be empty and \"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" + \"the start and end time/date cannot be empty.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMANDDEADLINE(\"OOPS!!! Invalid command. The command for a deadline should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" + \"deadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDDEADLINE(\"OOPS!!! The description of a deadline cannot be empty \"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" + \"and the deadline for the deadline cannot be empty.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETECOMMANDTODO(\"OOPS!!! The description of a todo cannot be empty.\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" INVALIDTASKNUMBER(\"OOPS!! Invalid task number. The task number has to be from\"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" + \" one to the number of tasks in the list.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" INCOMPLETETASKNUMBER(\"OOPS!! Task number cannot empty. Please indicate a task number\"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" + \" from one to the number of tasks in the list.\"),","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" MARKEMPTYLIST(\"Add task to start marking task as done!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" UNMARKEMPTYLIST(\"Add task to start marking task as not done!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" DELETEEMPTYLIST(\"Add task to start deleting!\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" INVALIDCOMMAND(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" EMPTYKEYWORD(\"OOPS!!! Please enter something to search.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" private final String errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" ExceptionTypes(String errormessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" this.errormessage \u003d errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" // A method to get the error message of the exception","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" public String getErrormessage() {","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" return this.errormessage;","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"CelestineTan03":37}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a parser that parses the user input","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" private String[] words;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a parser","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" * @param input the user input","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" public Parser(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" // Split string into first word and remaining words","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" this.words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * Return the command word of the user input","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" * @return the command word","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" return this.words[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" public String[] getTodoTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDTODO);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" return this.words;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" * Return the description of the deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" * @return the description of the deadline task","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" public String[] getDeadlineTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" } else if (this.words[1].contains(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" String[] description \u003d this.words[1].split(\" /by \");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" if (description.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * Return the description of the event task","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" * @return the description of the event task","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" public String[] getEventTask() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" } else if (this.words[1].contains(\"/from\") \u0026\u0026 this.words[1].contains(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" String[] description \u003d this.words[1].split(\" /from \");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" if (description.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETECOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" String[] interval \u003d description[1].split(\" /to \");","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" if (interval.length \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDDEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" return new String[]{description[0], interval[0], interval[1]};","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMANDEVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" * Return the task number of the task to be marked as done or deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" * @return the task number","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if the user input is invalid","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" public int getTaskNumber() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INCOMPLETETASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" return Integer.parseInt(words[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" public String getSearchKeyword() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" if (this.words.length \u003d\u003d 1 || this.words[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.EMPTYKEYWORD);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" return this.words[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":98}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" * Represents a storage for the chatbot","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" private final String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter outputFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the storage","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" * @param filePath the path to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" this.path \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" this.outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy hh:mm a\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" // Create file if file does not exist","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" if (!file.createNewFile()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" this.load();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(exception.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" * Save the tasks to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" * @throws IOException if there is an error writing to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" public void saveTasks(List\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" FileWriter writer \u003d new FileWriter(this.path);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" writer.write(task.toFileFormat() + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" writer.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" * Load the tasks from the file","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" * @return the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" * @throws IOException if there is an error reading from the file","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" public List\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" List\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(this.path));","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" String nextTask \u003d reader.readLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" while (nextTask !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" String[] taskDescription \u003d nextTask.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" String isDone \u003d taskDescription[1].strip();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" String description \u003d taskDescription[2].strip();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" switch (taskDescription[0].strip()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Todo(description));","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Deadline(description,","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" LocalDateTime.parse(taskDescription[3].strip(), this.outputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" tasks.add(new Event(description, LocalDateTime.parse(taskDescription[3].strip(),","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" this.outputFormatter), LocalDateTime.parse(taskDescription[4].strip(), this.outputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" if (isDone.equals(\"true\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" int index \u003d tasks.size() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" tasks.get(index).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":" nextTask \u003d reader.readLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" reader.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" return tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":92}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" * Check if the task has been completed and","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" * return the status icon of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" * @return the status icon of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" // Mark a task as done","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" // Mark a task as not done","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task in file format.","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" abstract String toFileFormat();","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" * Return the type of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" * @return the type of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" abstract String getTaskType();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":63}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" // The list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" // The formatter for the date and time","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" private final DateTimeFormatter inputFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the task list if an initial list exist","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" * @param tasks the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" this.inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for the task list if an initial list does not exist","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" this.inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" * @return the number of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" public int getNumberOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" * Returns the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" * @return the list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" public List\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" return this.tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" * Returns a success message when a task has been successfully added.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" * @return the success message","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" public String printAddTaskSuccessMessage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.get(this.tasks.size() - 1).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Now you have \");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" return message.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"CelestineTan03"},"content":" * Returns a success message when a task has been successfully deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"CelestineTan03"},"content":" * @return the success message","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"CelestineTan03"},"content":" public String printRemoveTaskSuccessMessage(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"CelestineTan03"},"content":" StringBuilder message \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Noted. I\u0027ve removed this task:\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"CelestineTan03"},"content":" message.append(task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"CelestineTan03"},"content":" message.append(\"Now you have \");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"CelestineTan03"},"content":" message.append(this.tasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"CelestineTan03"},"content":" message.append(\" task(s) in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"CelestineTan03"},"content":" return message.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the task details and add the task to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"CelestineTan03"},"content":" * @param task the task description","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"CelestineTan03"},"content":" * @param typeOfTask the type of the task to be added","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"CelestineTan03"},"content":" public void addTask(String[] task, String typeOfTask) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"CelestineTan03"},"content":" switch (typeOfTask) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"CelestineTan03"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Event(task[0], LocalDateTime.parse(task[1], this.inputFormatter),","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"CelestineTan03"},"content":" LocalDateTime.parse(task[2], this.inputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(printAddTaskSuccessMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"CelestineTan03"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Todo(task[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(printAddTaskSuccessMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"CelestineTan03"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.add(new Deadline(task[0], LocalDateTime.parse(task[1], this.inputFormatter)));","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"CelestineTan03"},"content":" } catch (DateTimeParseException exception) {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Invalid start and end date/time. The format should be yyyy-mm-dd hh:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(printAddTaskSuccessMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the command to delete a task","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"CelestineTan03"},"content":" * and remove the task from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"CelestineTan03"},"content":" * @param taskNumber the task number of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"CelestineTan03"},"content":" public void removeTask(int taskNumber) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.DELETEEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"CelestineTan03"},"content":" Task task \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"CelestineTan03"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(printRemoveTaskSuccessMessage(task));","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the task command to mark or unmark","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"CelestineTan03"},"content":" * a task and mark the task as done or mark a task as","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"CelestineTan03"},"content":" * not done","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"CelestineTan03"},"content":" * @param taskNumber the task number of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"CelestineTan03"},"content":" * @param action to mark or unmark the task","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"CelestineTan03"},"content":" * @throws DukeException if invalid or incorrect command","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"CelestineTan03"},"content":" public void markTask(int taskNumber, String action) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"CelestineTan03"},"content":" switch(action) {","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"CelestineTan03"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.MARKEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"CelestineTan03"},"content":" Task markTask \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"CelestineTan03"},"content":" markTask.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(markTask.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"CelestineTan03"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.UNMARKEMPTYLIST);","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"CelestineTan03"},"content":" if (taskNumber \u003e this.tasks.size() || taskNumber \u003c\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDTASKNUMBER);","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"CelestineTan03"},"content":" Task unmarkTask \u003d this.tasks.get(taskNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"CelestineTan03"},"content":" unmarkTask.markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(unmarkTask.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"CelestineTan03"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"CelestineTan03"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"CelestineTan03"},"content":" throw new DukeException(ExceptionTypes.INVALIDCOMMAND);","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":185,"author":{"gitId":"CelestineTan03"},"content":" * Takes in the keyword and find the tasks that","lastModifiedDate":"2023-09-04"},{"lineNumber":186,"author":{"gitId":"CelestineTan03"},"content":" * contains the keyword and print the tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":187,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"CelestineTan03"},"content":" * @param keyword the keyword to be searched","lastModifiedDate":"2023-09-04"},{"lineNumber":189,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":190,"author":{"gitId":"CelestineTan03"},"content":" public void findTask(String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"CelestineTan03"},"content":" if (this.tasks.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"There are no matching tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"CelestineTan03"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"CelestineTan03"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"CelestineTan03"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"CelestineTan03"},"content":" if (task.toString().contains(keyword) || task.getTaskType().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"CelestineTan03"},"content":" if (count \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Here are the matching task(s) in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(count + \". \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"CelestineTan03"},"content":" count++;","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"CelestineTan03"},"content":" if (count \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"There are no matching tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":209}},{"path":"src/main/java/duke/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents a task of type todo","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" * A constructor for a task of type todo","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" * @param description the task details","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" * Return the string representation of the task in file format.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" * @return the string representation in file format","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" public String toFileFormat() {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" return \"T | \" + this.isDone + \" | \" + this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":" * Return the task type.","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" * @return the task type","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" public String getTaskType() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" return \"todo\";","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"CelestineTan03":46}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":" * Represents the user interface of the chatbot","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":" // Print the greeting message","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" public void printGreeting() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Hello! I\u0027m Botty!\\nWhat can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" // Print the farewell message","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" public void printFarewell() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" * Print all the available commands","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" public void printAllCommands() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"OOPS!!! Invalid command. Try the following commands instead:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e todo \u003ctask\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e deadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e event \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e mark \u003ctask number\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e unmark \u003ctask number\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e delete \u003ctask number\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e find \u003ckeyword\u003e\");","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" System.out.println(\"\u003e bye\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":32}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":" * Represents a test for Parser class","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" public void testGetCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"todo\", new Parser(\"todo sleep\").getCommand());","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" public void testGetTodoTask() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"todo\"}, new Parser(\"todo\").getTodoTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of a todo cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":" public void testIncompleteCommandDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"deadline\"}, new Parser(\"deadline\").getDeadlineTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of a deadline cannot be empty and\"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"CelestineTan03"},"content":" + \" the deadline for the deadline cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"CelestineTan03"},"content":" public void testInvalidCommandDeadline() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"deadline\", \"sleep\"}, new Parser(\"deadline sleep /by\").getDeadlineTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! Invalid command. The command for a deadline should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"CelestineTan03"},"content":" + \"deadline \u003ctask\u003e /by yyyy-mm-dd hh:mm\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"CelestineTan03"},"content":" public void testIncompleteCommandEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"event\"}, new Parser(\"event\").getEventTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! The description of an event cannot be empty and the start\"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"CelestineTan03"},"content":" + \" and end time/date cannot be empty.\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"CelestineTan03"},"content":" public void testInvalidCommandEvent() {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"CelestineTan03"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"CelestineTan03"},"content":" assertArrayEquals(new String[] {\"event\", \"sleep\"}, new Parser(\"event sleep /from\").getEventTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"CelestineTan03"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"CelestineTan03"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"OOPS!!! Invalid command. The command for an event should be:\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"CelestineTan03"},"content":" + \"event \u003ctask\u003e /from yyyy-mm-dd hh:mm /to yyyy-mm-dd hh:mm\", e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":71}},{"path":"src/test/java/duke/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"package duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":" * Represents a test for Todo class","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":" public void testToStringConversion() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"[T][ ] sleep\", new Todo(\"sleep\").toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" public void testToFileFormat() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":" assertEquals(\"T | false | sleep\", new Todo(\"sleep\").toFileFormat());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"CelestineTan03":21}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"CelestineTan03"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"CelestineTan03"},"content":"mark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"CelestineTan03"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"CelestineTan03"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"CelestineTan03"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"CelestineTan03"},"content":"todo sleep","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"CelestineTan03"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"CelestineTan03"},"content":"event meeting /from 2pm /to 4pm","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"CelestineTan03"},"content":"event meeting /from 2023-10-10 14:00 /to 2023-10-10 16:00","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"CelestineTan03"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"CelestineTan03"},"content":"deadline lecture quiz /by 9pm","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"CelestineTan03"},"content":"deadline lecture quiz /by 2023-10-05 23:59","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"CelestineTan03"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"CelestineTan03"},"content":"find","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"find sleep","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"mark","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":"mark -2","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"unmark 1","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":"unmark 10","lastModifiedDate":"2023-08-22"},{"lineNumber":21,"author":{"gitId":"CelestineTan03"},"content":"unmark","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"delete -4","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"CelestineTan03"},"content":"delete","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"CelestineTan03"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"CelestineTan03"},"content":"add task","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"CelestineTan03"},"content":"bye","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"CelestineTan03":26}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"CelestineTan03"},"content":"# delete stored data from previous run","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"CelestineTan03"},"content":"if [ -e \"./duke.txt\" ]","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"CelestineTan03"},"content":"then","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"CelestineTan03"},"content":" rm ./duke.txt","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"CelestineTan03"},"content":"fi","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"CelestineTan03"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"CelestineTan03"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/duke/*.java","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"CelestineTan03"},"content":"java -classpath ../bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"CelestineTan03":8,"-":36}}] diff --git a/CelestineTan03_ip_master/commits.json b/CelestineTan03_ip_master/commits.json index 7dd2085b..2e6d541c 100644 --- a/CelestineTan03_ip_master/commits.json +++ b/CelestineTan03_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"CelestineTan03":[{"date":"2023-08-21","commitResults":[{"hash":"c9d815d867ac39c6f14cddb86cdb95f8a4b8ac9b","isMergeCommit":false,"messageTitle":"Rename chatbot and make chatbot greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"452735866ed65367eddb8600aabad358b606e835","isMergeCommit":false,"messageTitle":"Chatbot now echos user\u0027s command","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"e8854359fd0bcdb00ff02e6aff17d512684689f9","isMergeCommit":false,"messageTitle":"Add list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"7c862be0853d87015956278fccb64c225ff0276d","isMergeCommit":false,"messageTitle":"Add the ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":5}}},{"hash":"f3dbb859ac7703392bfd57f11df5a40addfcd0ae","isMergeCommit":false,"messageTitle":"Add support for tracking ToDos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":32}}}]},{"date":"2023-08-22","commitResults":[{"hash":"8bf452611252e8fdfe9c95f10c2c3f89c636529a","isMergeCommit":false,"messageTitle":"Test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":55,"deletions":52}}},{"hash":"31f2c9f5db4ac35df255cb6bd3124b0cba76c725","isMergeCommit":false,"messageTitle":"Add input validation","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":68,"deletions":19}}},{"hash":"6367ed81c74c1d1878ba02e4e32be686cb370bf0","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":50,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"39a876eba2c13af8be29bc21a7eecd39cca50bca","isMergeCommit":false,"messageTitle":"Update error handling and add javadoc","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":214,"deletions":66}}}]},{"date":"2023-08-28","commitResults":[{"hash":"dc130cbf0a2aeac45d785d60f14359b50e698d1f","isMergeCommit":false,"messageTitle":"feat: add the ability to save data","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":4}}}]},{"date":"2023-08-29","commitResults":[{"hash":"1558e9309921801d11d4220510e2e28b6bafec37","isMergeCommit":false,"messageTitle":"Add date and time feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":125,"deletions":103}}}]},{"date":"2023-08-30","commitResults":[{"hash":"de716081744f46ad60f61341424aafbc80248797","isMergeCommit":false,"messageTitle":"refactor: extract Ui, Storage, Parser, TaskList classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":395,"deletions":325}}},{"hash":"accbfd8c2c04000e1d473e5a7b27988ad1e3ea32","isMergeCommit":false,"messageTitle":"Add package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"1a8d0d568f85551d9ce791992058c158e2afdbd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"576740df4bd14c629e9f6207c35c6b229690f5f1","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":0}}},{"hash":"b4cc4feb64d0756c6b8e4c87ab6c62aac685ac7a","isMergeCommit":false,"messageTitle":"Create JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"607f5f0fdad3e64ebac8f93d7e417f3f581b9578","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":1}}},{"hash":"1d148e0193ece363b98a9b04b97020dd503f9cd3","isMergeCommit":false,"messageTitle":"Update code to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":1}}},{"hash":"d700e6fcd3fe3d28338740157b7143c6af235fb2","isMergeCommit":false,"messageTitle":"feat: find task by searching for keyword","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":77,"deletions":6}}},{"hash":"f25547fbac6b5f91e2f9c452e9f17d668817c80e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"52fd869228fa0fe57cf9334fdd96785f9faa54bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Deadline.java\n#\tsrc/main/java/duke/Event.java\n#\tsrc/main/java/duke/Task.java\n#\tsrc/main/java/duke/Todo.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"a8c4096e493a62d55a7d034d0640eab318a164e1","isMergeCommit":false,"messageTitle":"fix: text-ui-test fail due to previous test data stored and input to wrong program","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":7,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"CelestineTan03":{"java":910,"md":0,"fxml":0,"sh":8,"bat":0,"gradle":2,"txt":26}},"authorContributionVariance":{"CelestineTan03":76547.18},"authorDisplayNameMap":{"CelestineTan03":"CS2103T-W08-1 CELE..TONG"}} +{"authorDailyContributionsMap":{"CelestineTan03":[{"date":"2023-08-21","commitResults":[{"hash":"c9d815d867ac39c6f14cddb86cdb95f8a4b8ac9b","isMergeCommit":false,"messageTitle":"Rename chatbot and make chatbot greet and exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"452735866ed65367eddb8600aabad358b606e835","isMergeCommit":false,"messageTitle":"Chatbot now echos user\u0027s command","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"e8854359fd0bcdb00ff02e6aff17d512684689f9","isMergeCommit":false,"messageTitle":"Add list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"7c862be0853d87015956278fccb64c225ff0276d","isMergeCommit":false,"messageTitle":"Add the ability to mark and unmark tasks","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":5}}},{"hash":"f3dbb859ac7703392bfd57f11df5a40addfcd0ae","isMergeCommit":false,"messageTitle":"Add support for tracking ToDos, Deadlines and Events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":138,"deletions":32}}}]},{"date":"2023-08-22","commitResults":[{"hash":"8bf452611252e8fdfe9c95f10c2c3f89c636529a","isMergeCommit":false,"messageTitle":"Test using the I/O redirection technique","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":55,"deletions":52}}},{"hash":"31f2c9f5db4ac35df255cb6bd3124b0cba76c725","isMergeCommit":false,"messageTitle":"Add input validation","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":68,"deletions":19}}},{"hash":"6367ed81c74c1d1878ba02e4e32be686cb370bf0","isMergeCommit":false,"messageTitle":"Add support for deleting tasks from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":50,"deletions":10}}}]},{"date":"2023-08-23","commitResults":[{"hash":"39a876eba2c13af8be29bc21a7eecd39cca50bca","isMergeCommit":false,"messageTitle":"Update error handling and add javadoc","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":2},"java":{"insertions":214,"deletions":66}}}]},{"date":"2023-08-28","commitResults":[{"hash":"dc130cbf0a2aeac45d785d60f14359b50e698d1f","isMergeCommit":false,"messageTitle":"feat: add the ability to save data","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":4}}}]},{"date":"2023-08-29","commitResults":[{"hash":"1558e9309921801d11d4220510e2e28b6bafec37","isMergeCommit":false,"messageTitle":"Add date and time feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":125,"deletions":103}}}]},{"date":"2023-08-30","commitResults":[{"hash":"de716081744f46ad60f61341424aafbc80248797","isMergeCommit":false,"messageTitle":"refactor: extract Ui, Storage, Parser, TaskList classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":395,"deletions":325}}},{"hash":"accbfd8c2c04000e1d473e5a7b27988ad1e3ea32","isMergeCommit":false,"messageTitle":"Add package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"1a8d0d568f85551d9ce791992058c158e2afdbd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"576740df4bd14c629e9f6207c35c6b229690f5f1","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":84,"deletions":0}}},{"hash":"b4cc4feb64d0756c6b8e4c87ab6c62aac685ac7a","isMergeCommit":false,"messageTitle":"Create JAR file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"607f5f0fdad3e64ebac8f93d7e417f3f581b9578","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":1}}},{"hash":"1d148e0193ece363b98a9b04b97020dd503f9cd3","isMergeCommit":false,"messageTitle":"Update code to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":1}}},{"hash":"d700e6fcd3fe3d28338740157b7143c6af235fb2","isMergeCommit":false,"messageTitle":"feat: find task by searching for keyword","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":77,"deletions":6}}},{"hash":"f25547fbac6b5f91e2f9c452e9f17d668817c80e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Task.java\n","fileTypesAndContributionMap":{}},{"hash":"52fd869228fa0fe57cf9334fdd96785f9faa54bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/duke/Deadline.java\n#\tsrc/main/java/duke/Event.java\n#\tsrc/main/java/duke/Task.java\n#\tsrc/main/java/duke/Todo.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"a8c4096e493a62d55a7d034d0640eab318a164e1","isMergeCommit":false,"messageTitle":"fix: text-ui-test fail due to previous test data stored and input to wrong program","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":7,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"157ff6d9b6f764c1261897623ffa85841ae8b90e","isMergeCommit":false,"messageTitle":"Add checkstyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":49,"deletions":28}}}]}]},"authorFileTypeContributionMap":{"CelestineTan03":{"java":931,"md":0,"fxml":0,"sh":8,"bat":0,"gradle":7,"txt":26}},"authorContributionVariance":{"CelestineTan03":66080.79},"authorDisplayNameMap":{"CelestineTan03":"CS2103T-W08-1 CELE..TONG"}} diff --git a/ChongWeiJie29_ip_master/authorship.json b/ChongWeiJie29_ip_master/authorship.json index 2b77c6fe..a5f636df 100644 --- a/ChongWeiJie29_ip_master/authorship.json +++ b/ChongWeiJie29_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":"ChongWeiJie29"},"content":" mainClass.set(\"dukepackage.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":"ChongWeiJie29"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ChongWeiJie29":2,"-":41}},{"path":"src/main/java/dukepackage/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package dukepackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import toolpackage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"import toolpackage.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import toolpackage.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import toolpackage.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs the respective components to","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" * initialise Duke, namely the UI, Storage,","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" * and TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" * @param filePath File path of storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" boolean isCreated \u003d this.storage.createStorage();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" if (!isCreated) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" * Runs a loop to listen for commands by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" this.ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" Scanner inputs \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" boolean shouldContinue \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" while (shouldContinue) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" String command \u003d this.ui.readCommands(inputs);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" shouldContinue \u003d Parser.parse(command, this.tasks, this.ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" this.storage.saveStorage(this.tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" inputs.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" this.ui.showBye();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" new Duke(\"./data/tasks.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ChongWeiJie29":62,"-":3}},{"path":"src/main/java/dukepackage/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package dukepackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":" super(msg);","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":" ","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ChongWeiJie29":9}},{"path":"src/main/java/taskpackage/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package taskpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a Deadline task with the task and \"by\" date.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task to complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" * @param details Date to complete task by.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" * @param isDone Indicator of whether task has been completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there are missing dates or improper date format used.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" public Deadlines(String task, String details, String isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" super(task, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" this.by \u003d LocalDate.parse(details.substring(3));","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! Please use the proper format for the deadline (YYYY-MM-DD).\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There are missing details for the deadline.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints the \"by\" date of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" public String printDetails() {","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"(by: %s)\", this.by.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"[D]%s%s\", super.printTask(), this.printDetails());","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" * Formats and returns the \"by\" date of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" public String addDetailsToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"| by %s\", this.by);","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" public String addToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"D %s%s%n\", super.addToStorage(), this.addDetailsToStorage());","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ChongWeiJie29":66}},{"path":"src/main/java/taskpackage/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package taskpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"public class Events extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs an Event task with the task, \"from\" and \"to\" dates.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task to complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" * @param from Start date of event.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" * @param to End date of event.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" * @param isDone Indicator of whether task has been completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there are missing or improper date format used.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" public Events(String task, String from, String to, String isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" super(task, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" this.from \u003d LocalDate.parse(from.substring(5).replaceAll(\"\\\\s\", \"\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" this.to \u003d LocalDate.parse(to.substring(3));","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There are missing details for the event.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! Please use the proper format for the deadline (YYYY-MM-DD).\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints the \"from\" and \"to\" date of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" public String printDetails() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"(from: %s to: %s)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" this.from.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy\")),","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"[E]%s%s\", super.printTask(), this.printDetails());","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" * Formats and returns the \"from\" and \"to\" date of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" public String addDetailsToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"| from %s | to %s\", this.from, this.to);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" public String addToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"E %s%s%n\", super.addToStorage(), this.addDetailsToStorage());","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ChongWeiJie29":71}},{"path":"src/main/java/taskpackage/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package taskpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import toolpackage.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":" private String task;","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a new Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task to complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" * @param isDone Indicator of whether task has been completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if the task is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" public Task(String task, String isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" // Throws error if there is no task description.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" if (task.isEmpty()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! Task description should not be empty.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" this.isDone \u003d isDone.equals(\"1 \");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints tasks for user to see.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-21"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" public String printTask() {","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"[X] %s\", this.task);","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"[] %s\", this.task);","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" * Toggles the completed status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" * @param keyword Word to indicate whether to mark the task as complete or incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI of the bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" public void toggleDone(String keyword, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" this.isDone \u003d keyword.equals(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" ui.toggleDone(this, keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" * Formats and returns task for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" public String addToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"| 1 | %s\", this.task);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"| 0 | %s\", this.task);","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" * Checks whether the given keyword is found in the task string.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" * @param word Keyword to find in the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Whether the word is inside.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean matchKeyword(String word) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" return this.task.contains(word);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ChongWeiJie29":76}},{"path":"src/main/java/taskpackage/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package taskpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a new Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task to complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" * @param isDone Indicator of whether task has been completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if the task is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" public ToDos(String task, String isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":" super(task, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"[T]%s\", super.printTask());","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" public String addToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"T %s%n\", super.addToStorage());","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ChongWeiJie29":33}},{"path":"src/main/java/toolpackage/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Deadlines;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Events;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.ToDos;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" public Parser() {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":" * Parses and executes command given by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" * @param userInput String given by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" * @param tasks Task list of bot to be modified.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI of bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether Duke bot loop should continue.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there are any issues in the command execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" public static boolean parse(String userInput, TaskList tasks, Ui ui) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" String[] parsedCommand \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" String command \u003d parsedCommand[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" String task \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" if (parsedCommand.length \u003e 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" task \u003d parsedCommand[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.printList(ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.toggleDone(task, \"mark\", ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.toggleDone(task, \"unmark\", ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.removeItem(task, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.findTasks(task, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(task, \"0\"), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" parsedCommand \u003d task.split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" if (parsedCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There are missing deadline details.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(parsedCommand[0], parsedCommand[1],\"0\"), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" parsedCommand \u003d task.split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" if (parsedCommand.length \u003c\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There are missing event details.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(parsedCommand[0], parsedCommand[1], parsedCommand[2], \"0\"), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ChongWeiJie29":66}},{"path":"src/main/java/toolpackage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Deadlines;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Events;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.ToDos;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" private File file;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a new Storage space.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" * @param filePath File path of where data will be stored.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" * Creates a new directory and file to store the data.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether there was already existing data.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there are issues with the file creation.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean createStorage() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" Files.createDirectories(Paths.get(this.file.getParent()));","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" File newFile \u003d new File(this.file.getPath());","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" return newFile.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There was an error saving data into storage.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" * Saves data into storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" * @param listOfTasks List of tasks that needs to be saved.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether saving was successful.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there are issues with writing data into the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean saveStorage(TaskList listOfTasks) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" FileWriter fileWriter \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" listOfTasks.saveStorage(fileWriter);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException | DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There was an error saving data into storage.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" * Reads data from storage into bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" * @return ArrayList\u003cTask\u003e List of tasks to be loaded into the bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there is a missing file or corrupt data.","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" ArrayList\u003cTask\u003e listOfTasks \u003d new ArrayList\u003c\u003e();;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" Scanner data;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ChongWeiJie29"},"content":" data \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ChongWeiJie29"},"content":" String[] input;","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ChongWeiJie29"},"content":" while (data.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ChongWeiJie29"},"content":" input \u003d data.nextLine().split(\"\\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ChongWeiJie29"},"content":" if (input[0].equals(\"T \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ChongWeiJie29"},"content":" listOfTasks.add(new ToDos(input[2], input[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (input[0].equals(\"D \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ChongWeiJie29"},"content":" listOfTasks.add(new Deadlines(input[2], input[3], input[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (input[0].equals(\"E \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ChongWeiJie29"},"content":" listOfTasks.add(new Events(input[2], input[3], input[4], input[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ChongWeiJie29"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (FileNotFoundException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There was an error loading data from the storage.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ChongWeiJie29"},"content":" data.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ChongWeiJie29"},"content":" return listOfTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ChongWeiJie29":98}},{"path":"src/main/java/toolpackage/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" private ArrayList\u003cTask\u003e listOfTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a new and empty TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" this.listOfTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a new TaskList, given a existing list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" * @param listOfTasks List of tasks to fill the task list with.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" public TaskList(ArrayList\u003cTask\u003e listOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" this.listOfTasks \u003d listOfTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" * Saves tasks into storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" * @param fileWriter File writer object to write tasks into storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether save was successful.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there is an error writing data to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean saveStorage(FileWriter fileWriter) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" for (Task listOfTask : listOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" fileWriter.write(listOfTask.addToStorage());","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There was an error saving data into storage.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" * Instructs UI to print the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI to print the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" public void printList(Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" ui.printList(listOfTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" * Specifies which task in the task list to mark as complete or incomplete,","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" * and subsequently mark them accordingly.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" * @param id Task ID to toggle between complete and incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" * @param keyword Word to indicate whether the task was marked as complete or incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI to print toggle status.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether toggling was successful.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean toggleDone(String id, String keyword, Ui ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" this.listOfTasks.get(Integer.parseInt(id) - 1).toggleDone(keyword, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" if (keyword.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"☹ OOPS!!! Please indicate the task to mark in numbers.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"☹ OOPS!!! Please indicate the task to unmark in numbers.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ChongWeiJie29"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"☹ OOPS!!! Please indicate an appropriate index within the list range.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ChongWeiJie29"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ChongWeiJie29"},"content":" * Deletes task from task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ChongWeiJie29"},"content":" * @param id Task ID to delete.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI to print deletion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether deletion was successful.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean removeItem(String id, Ui ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ChongWeiJie29"},"content":" Task task \u003d this.listOfTasks.remove(Integer.parseInt(id) - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ChongWeiJie29"},"content":" ui.removeItem(task, this.listOfTasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ChongWeiJie29"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"☹ OOPS!!! Please indicate the task to delete in numbers.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ChongWeiJie29"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"☹ OOPS!!! Please indicate an appropriate index within the list range.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ChongWeiJie29"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ChongWeiJie29"},"content":" * Adds task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task to be added to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI to print addition status.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ChongWeiJie29"},"content":" public void addItem(Task task, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"ChongWeiJie29"},"content":" this.listOfTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"ChongWeiJie29"},"content":" ui.addItem(task, this.listOfTasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"ChongWeiJie29"},"content":" * Finds the tasks that contains the given word.","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"ChongWeiJie29"},"content":" * @param word Keyword to find in the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI to print tasks that contains the word.","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ChongWeiJie29"},"content":" public void findTasks(String word, Ui ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ChongWeiJie29"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ChongWeiJie29"},"content":" for (Task task : listOfTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ChongWeiJie29"},"content":" if (task.matchKeyword(word)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ChongWeiJie29"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ChongWeiJie29"},"content":" ui.printMatchingTasks(matchingTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ChongWeiJie29":132}},{"path":"src/main/java/toolpackage/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":" private static final String TEXT_GREETING \u003d \"Hello! I\u0027m ChampionSOS\\nWhat can I do for you?\";","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" private static final String TEXT_GOODBYE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" private static final String TEXT_NO_DATA \u003d \"No existing data found. New file created!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints greeting message to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(Ui.TEXT_GREETING);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints goodbye message to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" public void showBye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(Ui.TEXT_GOODBYE);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints \"No existing data\" message to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(Ui.TEXT_NO_DATA);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" * Reads and returns the inputs by users.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" * @param inputs Commands given by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" public String readCommands(Scanner inputs) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" return inputs.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" * @param listOfTasks List of tasks to print.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" public void printList(ArrayList\u003cTask\u003e listOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" for (int i \u003d 0; i \u003c listOfTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"%d.%s%n\", i+1, listOfTasks.get(i).printTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints the toggling status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task that was marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" * @param keyword Word to indicate whether the task was marked as complete or incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" public void toggleDone(Task task, String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" if (keyword.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"Nice! I\u0027ve marked this task as done:%n %s%n\", task.printTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"OK, I\u0027ve marked this task as not done yet:%n %s%n\", task.printTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints the deletion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task that was deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ChongWeiJie29"},"content":" * @param size Updated number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ChongWeiJie29"},"content":" public void removeItem(Task task, int size) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"Noted. I\u0027ve removed this task:%n %s%nNow you have %d tasks in the list.%n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ChongWeiJie29"},"content":" , task.printTask(), size);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints the addition status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task that was added.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ChongWeiJie29"},"content":" * @param size Updated number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ChongWeiJie29"},"content":" public void addItem(Task task, int size) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"Got it. I\u0027ve added this task:%n %s%nNow you have %d tasks in the list.%n\",","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ChongWeiJie29"},"content":" task.printTask(), size);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints out the list of tasks that contain the given keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ChongWeiJie29"},"content":" * @param listOfTasks List of tasks to print.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ChongWeiJie29"},"content":" public void printMatchingTasks(ArrayList\u003cTask\u003e listOfTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ChongWeiJie29"},"content":" for (int i \u003d 0; i \u003c listOfTasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"%d.%s%n\", i+1, listOfTasks.get(i).printTask());","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ChongWeiJie29":107}},{"path":"src/test/java/toolpackage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Deadlines;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Events;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.ToDos;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" public void createStorage_noInitialFile_trueReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" Storage storage \u003d new Storage(\"./testing/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" assertTrue(storage.createStorage());","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing/duke.txt\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" public void createStorage_haveInitialFile_falseReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" Storage storage \u003d new Storage(\"./testing/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" storage.createStorage();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" assertFalse(storage.createStorage());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing/duke.txt\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" public void saveStorage_trueReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" Storage storage \u003d new Storage(\"./testing/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" storage.createStorage();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" assertTrue(storage.saveStorage(tasks));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing/duke.txt\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ChongWeiJie29"},"content":" public void saveStorage_wrongDeadlineFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ChongWeiJie29"},"content":" Storage storage \u003d new Storage(\"./testing/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ChongWeiJie29"},"content":" storage.createStorage();","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 203-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ChongWeiJie29"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ChongWeiJie29"},"content":" assertEquals(\"☹ OOPS!!! Please use the proper format for the deadline (YYYY-MM-DD).\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ChongWeiJie29"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing/duke.txt\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ChongWeiJie29":105}},{"path":"src/test/java/toolpackage/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Deadlines;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Events;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.ToDos;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" public void toggleDone_trueReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" assertTrue(tasks.toggleDone(\"1\", \"mark\", ui));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" public void toggleDone_incorrectIndex_falseReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" assertFalse(tasks.toggleDone(\"5\", \"unmark\", ui));","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" public void removeItem_trueReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" assertTrue(tasks.removeItem(\"1\", ui));","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" public void removeItem_incorrectIndex_falseReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" assertFalse(tasks.removeItem(\"0\", ui));","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ChongWeiJie29":78}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"todo study cs2103","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"deadline quiz for cs2100 /by Friday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"event IG Fair 2023 /from 24 Aug 8pm /to 11pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"unmark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ChongWeiJie29":13}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"ChongWeiJie29"},"content":" mainClass.set(\"dukepackage.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":"ChongWeiJie29"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ChongWeiJie29":2,"-":41}},{"path":"src/main/java/dukepackage/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package dukepackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import toolpackage.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"import toolpackage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import toolpackage.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import toolpackage.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" * Represents a Duke bot. A Duke object contains","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" * its own storage, task lists and ui.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" private Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" private Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs the respective components to","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" * initialise Duke, namely the UI, Storage,","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" * and TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" * @param filePath File path of storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" boolean isCreated \u003d this.storage.createStorage();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" if (!isCreated) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" * Runs a loop to listen for commands by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" this.ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" Scanner inputs \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" boolean shouldContinue \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" while (shouldContinue) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" String command \u003d this.ui.readCommands(inputs);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" shouldContinue \u003d Parser.parse(command, this.tasks, this.ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" this.storage.saveStorage(this.tasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" inputs.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" this.ui.showBye();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" new Duke(\"./data/tasks.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ChongWeiJie29":65,"-":3}},{"path":"src/main/java/dukepackage/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package dukepackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":" * Represents a Duke Exception. A DukeException object","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":" * will contain an error message represented by","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":" * a string.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" super(msg);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ChongWeiJie29":13}},{"path":"src/main/java/taskpackage/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package taskpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":" * Represents a task with a deadline. A Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" * object will contain the task and deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" * represented by a Task object and LocalDate object","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":" * respectively.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a Deadline task with the task and \"by\" date.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task to complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" * @param details Date to complete task by.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" * @param isDone Indicator of whether task has been completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there are missing dates or improper date format used.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" public Deadlines(String task, String details, String isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" super(task, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" this.by \u003d LocalDate.parse(details.substring(3));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! Please use the proper format for the deadline (YYYY-MM-DD).\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There are missing details for the deadline.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints the \"by\" date of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" public String printDetails() {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"(by: %s)\", this.by.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"[D]%s%s\", super.printTask(), this.printDetails());","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" * Formats and returns the \"by\" date of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" public String addDetailsToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"| by %s\", this.by);","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" public String addToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"D %s%s%n\", super.addToStorage(), this.addDetailsToStorage());","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ChongWeiJie29":71}},{"path":"src/main/java/taskpackage/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package taskpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":" * Represents a task with a start and end","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" * date. An Events object contains the task,","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" * represented by a Task object, as well as the","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":" * start date and end date both represented by","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" * LocalDate objects.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":"public class Events extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs an Event task with the task, \"from\" and \"to\" dates.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task to complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" * @param from Start date of event.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" * @param to End date of event.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" * @param isDone Indicator of whether task has been completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there are missing or improper date format used.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" public Events(String task, String from, String to, String isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" super(task, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" this.from \u003d LocalDate.parse(from.substring(5).replaceAll(\"\\\\s\", \"\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" this.to \u003d LocalDate.parse(to.substring(3));","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There are missing details for the event.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! Please use the proper format for the deadline (YYYY-MM-DD).\");","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints the \"from\" and \"to\" date of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" public String printDetails() {","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"(from: %s to: %s)\",","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" this.from.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy\")),","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" this.to.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"[E]%s%s\", super.printTask(), this.printDetails());","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" * Formats and returns the \"from\" and \"to\" date of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" public String addDetailsToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"| from %s | to %s\", this.from, this.to);","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" public String addToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"E %s%s%n\", super.addToStorage(), this.addDetailsToStorage());","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ChongWeiJie29":78}},{"path":"src/main/java/taskpackage/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package taskpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import toolpackage.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":" * Represents a task. A Task object","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":" * contains a task in the form of a","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":" * string and a boolean indicating","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" * whether the task is completed.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":" private String task;","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a new Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task to complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" * @param isDone Indicator of whether task has been completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if the task is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" public Task(String task, String isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" // Throws error if there is no task description.","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" if (task.isEmpty()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! Task description should not be empty.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" this.isDone \u003d isDone.equals(\"1 \");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints tasks for user to see.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" public String printTask() {","lastModifiedDate":"2023-08-21"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"[X] %s\", this.task);","lastModifiedDate":"2023-08-21"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"[] %s\", this.task);","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" * Toggles the completed status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" * @param keyword Word to indicate whether to mark the task as complete or incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI of the bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" public void toggleDone(String keyword, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" this.isDone \u003d keyword.equals(\"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" ui.toggleDone(this, keyword);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" * Formats and returns task for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" public String addToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"| 1 | %s\", this.task);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"| 0 | %s\", this.task);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" * Checks whether the given keyword is found in the task string.","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" * @param word Keyword to find in the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Whether the word is inside.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean matchKeyword(String word) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ChongWeiJie29"},"content":" return this.task.contains(word);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"ChongWeiJie29":82}},{"path":"src/main/java/taskpackage/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package taskpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":" * Represents a todo task. A Todo object","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":" * contains a task, represented by a","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":" * Task Object.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a new Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task to complete.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" * @param isDone Indicator of whether task has been completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if the task is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" public ToDos(String task, String isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" super(task, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"[T]%s\", super.printTask());","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" public String addToStorage() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" return String.format(\"T %s%n\", super.addToStorage());","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ChongWeiJie29":38}},{"path":"src/main/java/toolpackage/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Deadlines;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Events;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.ToDos;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":" * Represents the parser tool for the","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" * Duke bot. A Parser object is used","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" * by the Duke bot to understand","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":" * and execute user commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" public Parser() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" * Parses and executes command given by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" * @param userInput String given by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" * @param tasks Task list of bot to be modified.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI of bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether Duke bot loop should continue.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there are any issues in the command execution.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" public static boolean parse(String userInput, TaskList tasks, Ui ui) throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" String[] parsedCommand \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" String command \u003d parsedCommand[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" String task \u003d \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" if (parsedCommand.length \u003e 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" task \u003d parsedCommand[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" return false;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.printList(ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.toggleDone(task, \"mark\", ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.toggleDone(task, \"unmark\", ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.removeItem(task, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.findTasks(task, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(task, \"0\"), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" parsedCommand \u003d task.split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" if (parsedCommand.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There are missing deadline details.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(parsedCommand[0], parsedCommand[1], \"0\"), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" parsedCommand \u003d task.split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" if (parsedCommand.length \u003c\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There are missing event details.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(parsedCommand[0], parsedCommand[1], parsedCommand[2], \"0\"), ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" return true;","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ChongWeiJie29":71}},{"path":"src/main/java/toolpackage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Deadlines;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Events;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.ToDos;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" * Represents the storage used by","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" * the Duke bot. A Storage object","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" * contains a file represented by a","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" * File object, and serves as the","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" * interface for reading and writing data","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" * into the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" private File file;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a new Storage space.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" * @param filePath File path of where data will be stored.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" * Creates a new directory and file to store the data.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether there was already existing data.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there are issues with the file creation.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean createStorage() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" Files.createDirectories(Paths.get(this.file.getParent()));","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" File newFile \u003d new File(this.file.getPath());","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" return newFile.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There was an error saving data into storage.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" * Saves data into storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" * @param listOfTasks List of tasks that needs to be saved.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether saving was successful.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there are issues with writing data into the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean saveStorage(TaskList listOfTasks) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" FileWriter fileWriter \u003d new FileWriter(this.file);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" listOfTasks.saveStorage(fileWriter);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException | DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There was an error saving data into storage.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":" * Reads data from storage into bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ChongWeiJie29"},"content":" * @return ArrayList\u003cTask\u003e List of tasks to be loaded into the bot.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there is a missing file or corrupt data.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ChongWeiJie29"},"content":" public ArrayList\u003cTask\u003e load() throws DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ChongWeiJie29"},"content":" ArrayList\u003cTask\u003e listOfTasks \u003d new ArrayList\u003c\u003e();;","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"ChongWeiJie29"},"content":" Scanner data;","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ChongWeiJie29"},"content":" data \u003d new Scanner(this.file);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ChongWeiJie29"},"content":" String[] input;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ChongWeiJie29"},"content":" while (data.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ChongWeiJie29"},"content":" input \u003d data.nextLine().split(\"\\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ChongWeiJie29"},"content":" if (input[0].equals(\"T \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"ChongWeiJie29"},"content":" listOfTasks.add(new ToDos(input[2], input[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (input[0].equals(\"D \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"ChongWeiJie29"},"content":" listOfTasks.add(new Deadlines(input[2], input[3], input[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"ChongWeiJie29"},"content":" } else if (input[0].equals(\"E \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"ChongWeiJie29"},"content":" listOfTasks.add(new Events(input[2], input[3], input[4], input[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (FileNotFoundException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There was an error loading data from the storage.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"ChongWeiJie29"},"content":" data.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ChongWeiJie29"},"content":" return listOfTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ChongWeiJie29":105}},{"path":"src/main/java/toolpackage/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":" * Represents the tasklist in the Duke bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":" * A TaskList object contains a list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":" * represented by a ArrayList of Task objects.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" private ArrayList\u003cTask\u003e listOfTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a new and empty TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" this.listOfTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" * Constructs a new TaskList, given a existing list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" * @param listOfTasks List of tasks to fill the task list with.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" public TaskList(ArrayList\u003cTask\u003e listOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" this.listOfTasks \u003d listOfTasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" * Saves tasks into storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" * @param fileWriter File writer object to write tasks into storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether save was successful.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" * @throws DukeException if there is an error writing data to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean saveStorage(FileWriter fileWriter) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" for (Task listOfTask : listOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" fileWriter.write(listOfTask.addToStorage());","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" throw new DukeException(\"☹ OOPS!!! There was an error saving data into storage.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" * Instructs UI to print the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI to print the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" public void printList(Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" ui.printList(listOfTasks);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" * Specifies which task in the task list to mark as complete or incomplete,","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" * and subsequently mark them accordingly.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" * @param id Task ID to toggle between complete and incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" * @param keyword Word to indicate whether the task was marked as complete or incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI to print toggle status.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether toggling was successful.","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean toggleDone(String id, String keyword, Ui ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" this.listOfTasks.get(Integer.parseInt(id) - 1).toggleDone(keyword, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ChongWeiJie29"},"content":" if (keyword.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"☹ OOPS!!! Please indicate the task to mark in numbers.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"☹ OOPS!!! Please indicate the task to unmark in numbers.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"ChongWeiJie29"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"☹ OOPS!!! Please indicate an appropriate index within the list range.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"ChongWeiJie29"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ChongWeiJie29"},"content":" * Deletes task from task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ChongWeiJie29"},"content":" * @param id Task ID to delete.","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI to print deletion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ChongWeiJie29"},"content":" * @return boolean Indicate whether deletion was successful.","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ChongWeiJie29"},"content":" public boolean removeItem(String id, Ui ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ChongWeiJie29"},"content":" Task task \u003d this.listOfTasks.remove(Integer.parseInt(id) - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ChongWeiJie29"},"content":" ui.removeItem(task, this.listOfTasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ChongWeiJie29"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"☹ OOPS!!! Please indicate the task to delete in numbers.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"ChongWeiJie29"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"☹ OOPS!!! Please indicate an appropriate index within the list range.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"ChongWeiJie29"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ChongWeiJie29"},"content":" * Adds task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task to be added to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI to print addition status.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"ChongWeiJie29"},"content":" public void addItem(Task task, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"ChongWeiJie29"},"content":" this.listOfTasks.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"ChongWeiJie29"},"content":" ui.addItem(task, this.listOfTasks.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"ChongWeiJie29"},"content":" * Finds the tasks that contains the given word.","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"ChongWeiJie29"},"content":" * @param word Keyword to find in the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"ChongWeiJie29"},"content":" * @param ui UI to print tasks that contains the word.","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"ChongWeiJie29"},"content":" public void findTasks(String word, Ui ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"ChongWeiJie29"},"content":" ArrayList\u003cTask\u003e matchingTasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"ChongWeiJie29"},"content":" for (Task task : listOfTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"ChongWeiJie29"},"content":" if (task.matchKeyword(word)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"ChongWeiJie29"},"content":" matchingTasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"ChongWeiJie29"},"content":" ui.printMatchingTasks(matchingTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ChongWeiJie29":137}},{"path":"src/main/java/toolpackage/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":" * Represents the ui of the Duke bot.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":" * A Ui object is responsible for printing","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":" * the relevant information onto the terminal","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":" * for the user to read.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" private static final String TEXT_GREETING \u003d \"Hello! I\u0027m ChampionSOS\\nWhat can I do for you?\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" private static final String TEXT_GOODBYE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" private static final String TEXT_NO_DATA \u003d \"No existing data found. New file created!\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints greeting message to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(Ui.TEXT_GREETING);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints goodbye message to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" public void showBye() {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(Ui.TEXT_GOODBYE);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints \"No existing data\" message to user.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(Ui.TEXT_NO_DATA);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" * Reads and returns the inputs by users.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" * @param inputs Commands given by user.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" * @return String","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" public String readCommands(Scanner inputs) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" return inputs.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" * @param listOfTasks List of tasks to print.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" public void printList(ArrayList\u003cTask\u003e listOfTasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" for (int i \u003d 0; i \u003c listOfTasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"%d.%s%n\", i + 1, listOfTasks.get(i).printTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints the toggling status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task that was marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" * @param keyword Word to indicate whether the task was marked as complete or incomplete.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" public void toggleDone(Task task, String keyword) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" if (keyword.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"Nice! I\u0027ve marked this task as done:%n %s%n\", task.printTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"OK, I\u0027ve marked this task as not done yet:%n %s%n\", task.printTask());","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints the deletion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task that was deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ChongWeiJie29"},"content":" * @param size Updated number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ChongWeiJie29"},"content":" public void removeItem(Task task, int size) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"Noted. I\u0027ve removed this task:%n %s%nNow you have %d tasks in the list.%n\",","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"ChongWeiJie29"},"content":" task.printTask(), size);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints the addition status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ChongWeiJie29"},"content":" * @param task Task that was added.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ChongWeiJie29"},"content":" * @param size Updated number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ChongWeiJie29"},"content":" public void addItem(Task task, int size) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"Got it. I\u0027ve added this task:%n %s%nNow you have %d tasks in the list.%n\",","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"ChongWeiJie29"},"content":" task.printTask(), size);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ChongWeiJie29"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ChongWeiJie29"},"content":" * Prints out the list of tasks that contain the given keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ChongWeiJie29"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"ChongWeiJie29"},"content":" * @param listOfTasks List of tasks to print.","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"ChongWeiJie29"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"ChongWeiJie29"},"content":" public void printMatchingTasks(ArrayList\u003cTask\u003e listOfTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"ChongWeiJie29"},"content":" for (int i \u003d 0; i \u003c listOfTasks.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.printf(\"%d.%s%n\", i + 1, listOfTasks.get(i).printTask());","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ChongWeiJie29":113}},{"path":"src/test/java/toolpackage/StorageTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Deadlines;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Events;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.ToDos;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":"public class StorageTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" public void createStorage_noInitialFile_trueReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":" Storage storage \u003d new Storage(\"./testing/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" assertTrue(storage.createStorage());","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing/duke.txt\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":" public void createStorage_haveInitialFile_falseReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" Storage storage \u003d new Storage(\"./testing/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" storage.createStorage();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" assertFalse(storage.createStorage());","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing/duke.txt\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" public void saveStorage_trueReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" Storage storage \u003d new Storage(\"./testing/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" storage.createStorage();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" assertTrue(storage.saveStorage(tasks));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing/duke.txt\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"ChongWeiJie29"},"content":" public void saveStorage_wrongDeadlineFormat_exceptionThrown() {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"ChongWeiJie29"},"content":" Storage storage \u003d new Storage(\"./testing/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"ChongWeiJie29"},"content":" storage.createStorage();","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 203-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"ChongWeiJie29"},"content":" assertEquals(\"☹ OOPS!!! Please use the proper format for the deadline (YYYY-MM-DD).\", e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"ChongWeiJie29"},"content":" } finally {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing/duke.txt\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"ChongWeiJie29"},"content":" Files.deleteIfExists(Paths.get(\"./testing\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ChongWeiJie29":104}},{"path":"src/test/java/toolpackage/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"package toolpackage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"import dukepackage.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Deadlines;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.Events;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"import taskpackage.ToDos;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"ChongWeiJie29"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ChongWeiJie29"},"content":" public void toggleDone_trueReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ChongWeiJie29"},"content":" assertTrue(tasks.toggleDone(\"1\", \"mark\", ui));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ChongWeiJie29"},"content":" public void toggleDone_incorrectIndex_falseReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ChongWeiJie29"},"content":" assertFalse(tasks.toggleDone(\"5\", \"unmark\", ui));","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ChongWeiJie29"},"content":" public void removeItem_trueReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ChongWeiJie29"},"content":" assertTrue(tasks.removeItem(\"1\", ui));","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"ChongWeiJie29"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"ChongWeiJie29"},"content":" public void removeItem_incorrectIndex_falseReturned() {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"ChongWeiJie29"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"ChongWeiJie29"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"ChongWeiJie29"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"ChongWeiJie29"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new ToDos(\"Todo 1\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Deadlines(\"Deadline 1\", \"by 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"ChongWeiJie29"},"content":" tasks.addItem(new Events(\"Event 1\", \"from 2023-08-30\", \"to 2023-08-31\", \"0\"), ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"ChongWeiJie29"},"content":" assertFalse(tasks.removeItem(\"0\", ui));","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"ChongWeiJie29"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"ChongWeiJie29"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"ChongWeiJie29"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"ChongWeiJie29"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ChongWeiJie29":77}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ChongWeiJie29"},"content":"todo study cs2103","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"ChongWeiJie29"},"content":"deadline quiz for cs2100 /by Friday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"ChongWeiJie29"},"content":"event IG Fair 2023 /from 24 Aug 8pm /to 11pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"ChongWeiJie29"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"ChongWeiJie29"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"ChongWeiJie29"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"ChongWeiJie29"},"content":"mark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"ChongWeiJie29"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"ChongWeiJie29"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"ChongWeiJie29"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"ChongWeiJie29"},"content":"unmark 3","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"ChongWeiJie29"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"ChongWeiJie29"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"ChongWeiJie29":13}}] diff --git a/ChongWeiJie29_ip_master/commits.json b/ChongWeiJie29_ip_master/commits.json index ca04d853..1dea370a 100644 --- a/ChongWeiJie29_ip_master/commits.json +++ b/ChongWeiJie29_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ChongWeiJie29":[{"date":"2023-08-21","commitResults":[{"hash":"b32328a84872fd5e6b226966317f9c468a7a948c","isMergeCommit":false,"messageTitle":"Complete Level 0: Rename, Greet, Exit","messageBody":"Rename chatbot.\nAdd in feature for bot to greet and exit.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a3030c0306d9b8be90f3d13a92dae18e87ae2214","isMergeCommit":false,"messageTitle":"Complete Level 1: Echo","messageBody":"Make bot echo command by user.\nExits only when user says bye.\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"d35b14918475091e5ad59d732bf42fc079da6349","isMergeCommit":false,"messageTitle":"Complete Level 2: Add, List","messageBody":"Add in ability to add text into an array.\nAdd in ability to return array of text added.\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":2}}},{"hash":"866b992f63ac1808112aff8763537192b90d1ed3","isMergeCommit":false,"messageTitle":"Complete Level 3: Mark as Done","messageBody":"Add ability to toggle tasks between done\nand undone.\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":6}}}]},{"date":"2023-08-23","commitResults":[{"hash":"cfb490c64dc12116562e425fc3d006d232d0700e","isMergeCommit":false,"messageTitle":"Complete Level 4: ToDos, Events, Deadlines","messageBody":"Add in specific tasks as categories, with\nrespective details such as timing of event\nand \u0027due by\u0027 deadline\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":5}}},{"hash":"8b24054b3df8b8fcc04fa73744105a81c6966a83","isMergeCommit":false,"messageTitle":"Complete A-TextUiTesting: Automated Text UI Testing","messageBody":"Added in files for semi-automated testing of Duke.\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"738083d2f2ea801ac17d398e4d1959ec3b8a2b7b","isMergeCommit":false,"messageTitle":"Complete Level 5: Handle Errors","messageBody":"Handle most incorrect inputs by users, such as empty task, or\nimproper formatting.\n","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":12}}},{"hash":"c57f99db0133deb0dd06619f6b4189d72c8e3b8b","isMergeCommit":false,"messageTitle":"Supplement Level 5: Handle Errors","messageBody":"Added in a few more scenarios of incorrect inputs from users\nsuch as empty \u0027from\u0027, \u0027to\u0027 and \u0027by\u0027.\n","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"41307f811b42ff8412fa383c1b49e662b8dee8ee","isMergeCommit":false,"messageTitle":"Complete Level 6: Delete","messageBody":"Add feature to delete task from list.\n","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":11}}},{"hash":"003f07c91061fa4ead06a9109a9d88c43ca77a7c","isMergeCommit":false,"messageTitle":"Additional modification for Level 6: Delete","messageBody":"Added in error handling for deletion.\nModified some error handling for marking and\nunmarking for previous Level 5.\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":7}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d717ecf5506c660c2d4329b8dc4ae17c102e172e","isMergeCommit":false,"messageTitle":"Close scanner object at the end","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"9889e5a5b9f67744b0a6a9f637ea4418829b295b","isMergeCommit":false,"messageTitle":"Complete Level 7: Save","messageBody":"Save task list in disk, and load\ndata into bot when starting.\n","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":4}}},{"hash":"4fbf2acbc265bf03c44f19fb5087810dd3945c0a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"70582b1351cba49aad5ed7e0ac9a532784b22ade","isMergeCommit":false,"messageTitle":"Complete Level 8: Dates and Times","messageBody":"Change Duke bot to now understand date inputs\nas a LocalDate Object rather than just a string.\nAlso, prints these details in a different format.\n","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":9}}},{"hash":"b2b3fb9b761478897b0a626fc51b74a257201292","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"40e409c1a314a2255f4a3be3e7361fbb49712c0c","isMergeCommit":false,"messageTitle":"Complete A-OOP: Use More OOP","messageBody":"Refactor code to have Ui, Storage,\nParser and TaskList classes.\n","fileTypesAndContributionMap":{"java":{"insertions":345,"deletions":249}}},{"hash":"9fcd5fd4d5ad578829188e0efa88e1d71e727dff","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-OOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"5a3f080d30097568857391cb718639ae13ae6f7a","isMergeCommit":false,"messageTitle":"Complete A-Packages: Organize into packages","messageBody":"Organise existing classes into suitable packages.\n","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":122}}},{"hash":"e295ed0a0a395f30e238936a785940f78ee5b6c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"cdd97020ec458cb8a930302c68bee3cd22664e1e","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7fef4e7c4de86b04b83512d1a3814ef3f7c04cf6","isMergeCommit":false,"messageTitle":"Complete A-Gradle: Use Gradle","messageBody":"Automate build task of project.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"d7abf0a9fa222cba3144f204b4eb8aef8f2b6722","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"cf40fe98b4a05151067acc657a25a765cc5ee47f","isMergeCommit":false,"messageTitle":"Complete A-JUnit: Add JUnit Tests","messageBody":"Add JUnit tests to test code.\n","fileTypesAndContributionMap":{"java":{"insertions":178,"deletions":6}}},{"hash":"9c83bd4f4158853ef4b9cf8c41d73643e1d91bdc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"d0d57502220b97917435d781a75ff6cfc4c3d99d","isMergeCommit":false,"messageTitle":"Complete A-Jar: Create a JAR File","messageBody":"Package app as a jar file.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"b03fe0240dde0c807c2770017221e10e313265b1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"bc8e4a80792de0ab5b1f99912fc9d5e06d450dfc","isMergeCommit":false,"messageTitle":"Complete A-JavaDoc: JavaDoc","messageBody":"Add JavaDoc comments to methods\n","fileTypesAndContributionMap":{"java":{"insertions":211,"deletions":6}}},{"hash":"2f37a2098ea2663ad90eebb25f87d577c52ffef5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"eaf534c7f12f2d405bd06179621623f42b56d5ab","isMergeCommit":false,"messageTitle":"Complete A-CodingStandard: Follow the Coding Standard","messageBody":"Tweak code to comply with Java coding standard.\n","fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":75}}},{"hash":"acc8066ecb531e21db094a5ec3930ea6d4c079bb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"Merge A-CodingStandard into master\n\nMerge branch into master after fixing merge conflicts.\n","fileTypesAndContributionMap":{}},{"hash":"bd4d3b28a79ffd56a0f20d44fff16868c63215e8","isMergeCommit":false,"messageTitle":"Change gradle build file","messageBody":"Change build.gradle file to match the change\nin package name.\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"606b8213d984029e6dc9c0f023f8432b9ecafdfd","isMergeCommit":false,"messageTitle":"Complete Level 9: Find","messageBody":"Add in feature to find tasks based on keyword.\n","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":0}}},{"hash":"f4dc66a1f43e4db3ee56a4e33994cc4bae0120f9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"Merge Level 9: Find\n\nMerge Level-9 into master branch after\nfixing merge conflicts\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ChongWeiJie29":{"java":903,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":2,"txt":13}},"authorContributionVariance":{"ChongWeiJie29":63121.78},"authorDisplayNameMap":{"ChongWeiJie29":"CS2103T-T15-2 CHON.. JIE"}} +{"authorDailyContributionsMap":{"ChongWeiJie29":[{"date":"2023-08-21","commitResults":[{"hash":"b32328a84872fd5e6b226966317f9c468a7a948c","isMergeCommit":false,"messageTitle":"Complete Level 0: Rename, Greet, Exit","messageBody":"Rename chatbot.\nAdd in feature for bot to greet and exit.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"a3030c0306d9b8be90f3d13a92dae18e87ae2214","isMergeCommit":false,"messageTitle":"Complete Level 1: Echo","messageBody":"Make bot echo command by user.\nExits only when user says bye.\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"d35b14918475091e5ad59d732bf42fc079da6349","isMergeCommit":false,"messageTitle":"Complete Level 2: Add, List","messageBody":"Add in ability to add text into an array.\nAdd in ability to return array of text added.\n","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":2}}},{"hash":"866b992f63ac1808112aff8763537192b90d1ed3","isMergeCommit":false,"messageTitle":"Complete Level 3: Mark as Done","messageBody":"Add ability to toggle tasks between done\nand undone.\n","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":6}}}]},{"date":"2023-08-23","commitResults":[{"hash":"cfb490c64dc12116562e425fc3d006d232d0700e","isMergeCommit":false,"messageTitle":"Complete Level 4: ToDos, Events, Deadlines","messageBody":"Add in specific tasks as categories, with\nrespective details such as timing of event\nand \u0027due by\u0027 deadline\n","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":5}}},{"hash":"8b24054b3df8b8fcc04fa73744105a81c6966a83","isMergeCommit":false,"messageTitle":"Complete A-TextUiTesting: Automated Text UI Testing","messageBody":"Added in files for semi-automated testing of Duke.\n","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"738083d2f2ea801ac17d398e4d1959ec3b8a2b7b","isMergeCommit":false,"messageTitle":"Complete Level 5: Handle Errors","messageBody":"Handle most incorrect inputs by users, such as empty task, or\nimproper formatting.\n","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":12}}},{"hash":"c57f99db0133deb0dd06619f6b4189d72c8e3b8b","isMergeCommit":false,"messageTitle":"Supplement Level 5: Handle Errors","messageBody":"Added in a few more scenarios of incorrect inputs from users\nsuch as empty \u0027from\u0027, \u0027to\u0027 and \u0027by\u0027.\n","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"41307f811b42ff8412fa383c1b49e662b8dee8ee","isMergeCommit":false,"messageTitle":"Complete Level 6: Delete","messageBody":"Add feature to delete task from list.\n","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":11}}},{"hash":"003f07c91061fa4ead06a9109a9d88c43ca77a7c","isMergeCommit":false,"messageTitle":"Additional modification for Level 6: Delete","messageBody":"Added in error handling for deletion.\nModified some error handling for marking and\nunmarking for previous Level 5.\n","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":7}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d717ecf5506c660c2d4329b8dc4ae17c102e172e","isMergeCommit":false,"messageTitle":"Close scanner object at the end","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"9889e5a5b9f67744b0a6a9f637ea4418829b295b","isMergeCommit":false,"messageTitle":"Complete Level 7: Save","messageBody":"Save task list in disk, and load\ndata into bot when starting.\n","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":4}}},{"hash":"4fbf2acbc265bf03c44f19fb5087810dd3945c0a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"70582b1351cba49aad5ed7e0ac9a532784b22ade","isMergeCommit":false,"messageTitle":"Complete Level 8: Dates and Times","messageBody":"Change Duke bot to now understand date inputs\nas a LocalDate Object rather than just a string.\nAlso, prints these details in a different format.\n","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":9}}},{"hash":"b2b3fb9b761478897b0a626fc51b74a257201292","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"40e409c1a314a2255f4a3be3e7361fbb49712c0c","isMergeCommit":false,"messageTitle":"Complete A-OOP: Use More OOP","messageBody":"Refactor code to have Ui, Storage,\nParser and TaskList classes.\n","fileTypesAndContributionMap":{"java":{"insertions":345,"deletions":249}}},{"hash":"9fcd5fd4d5ad578829188e0efa88e1d71e727dff","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-OOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"5a3f080d30097568857391cb718639ae13ae6f7a","isMergeCommit":false,"messageTitle":"Complete A-Packages: Organize into packages","messageBody":"Organise existing classes into suitable packages.\n","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":122}}},{"hash":"e295ed0a0a395f30e238936a785940f78ee5b6c3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"cdd97020ec458cb8a930302c68bee3cd22664e1e","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-A-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7fef4e7c4de86b04b83512d1a3814ef3f7c04cf6","isMergeCommit":false,"messageTitle":"Complete A-Gradle: Use Gradle","messageBody":"Automate build task of project.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"d7abf0a9fa222cba3144f204b4eb8aef8f2b6722","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"cf40fe98b4a05151067acc657a25a765cc5ee47f","isMergeCommit":false,"messageTitle":"Complete A-JUnit: Add JUnit Tests","messageBody":"Add JUnit tests to test code.\n","fileTypesAndContributionMap":{"java":{"insertions":178,"deletions":6}}},{"hash":"9c83bd4f4158853ef4b9cf8c41d73643e1d91bdc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JUnit\u0027","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"d0d57502220b97917435d781a75ff6cfc4c3d99d","isMergeCommit":false,"messageTitle":"Complete A-Jar: Create a JAR File","messageBody":"Package app as a jar file.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}},{"hash":"b03fe0240dde0c807c2770017221e10e313265b1","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-Jar\u0027","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{}},{"hash":"bc8e4a80792de0ab5b1f99912fc9d5e06d450dfc","isMergeCommit":false,"messageTitle":"Complete A-JavaDoc: JavaDoc","messageBody":"Add JavaDoc comments to methods\n","fileTypesAndContributionMap":{"java":{"insertions":211,"deletions":6}}},{"hash":"2f37a2098ea2663ad90eebb25f87d577c52ffef5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"eaf534c7f12f2d405bd06179621623f42b56d5ab","isMergeCommit":false,"messageTitle":"Complete A-CodingStandard: Follow the Coding Standard","messageBody":"Tweak code to comply with Java coding standard.\n","fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":75}}},{"hash":"acc8066ecb531e21db094a5ec3930ea6d4c079bb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"Merge A-CodingStandard into master\n\nMerge branch into master after fixing merge conflicts.\n","fileTypesAndContributionMap":{}},{"hash":"bd4d3b28a79ffd56a0f20d44fff16868c63215e8","isMergeCommit":false,"messageTitle":"Change gradle build file","messageBody":"Change build.gradle file to match the change\nin package name.\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"606b8213d984029e6dc9c0f023f8432b9ecafdfd","isMergeCommit":false,"messageTitle":"Complete Level 9: Find","messageBody":"Add in feature to find tasks based on keyword.\n","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":0}}},{"hash":"f4dc66a1f43e4db3ee56a4e33994cc4bae0120f9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"Merge Level 9: Find\n\nMerge Level-9 into master branch after\nfixing merge conflicts\n","tags":["Level-9"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"9c497d46662136067e4efb1dcb2c3622826b6e64","isMergeCommit":false,"messageTitle":"Add in JavaDoc comments for classes","messageBody":"Add in JavaDoc comments for classes, which\nwere missed out previously.\n","fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":16}}}]}]},"authorFileTypeContributionMap":{"ChongWeiJie29":{"java":954,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":2,"txt":13}},"authorContributionVariance":{"ChongWeiJie29":51842.582},"authorDisplayNameMap":{"ChongWeiJie29":"CS2103T-T15-2 CHON.. JIE"}} diff --git a/Clin-lyx_ip_master/authorship.json b/Clin-lyx_ip_master/authorship.json index 7e17a49d..1a1c414a 100644 --- a/Clin-lyx_ip_master/authorship.json +++ b/Clin-lyx_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"[D][X] return book (by: Dec 2 2019 1800)","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"[E][ ] project meeting (from: Sep 4 2023 2pm to: 4pm)","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"[D][ ] finish CS2103T ip (by: Sep 3 2023 2359)","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Clin-lyx":4}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"import duke.processors.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" public Duke() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" TaskList tasks \u003d new TaskList(new FileHandler());","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" parser \u003d new Parser(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" private void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" ui.OnEnter();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" new FileHandler().fileCreate();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" while (!parser.getTerminate()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" parser.readInputs(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" ui.OnExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" new Duke().run();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Clin-lyx":32,"-":4}},{"path":"src/main/java/duke/exception/DukeEmptyCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"public class DukeEmptyCommandException extends DukeException{","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":" public DukeEmptyCommandException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" super(\"A command is needed for the program to excute.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Clin-lyx":7}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"public class DukeException extends Exception{","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" super(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Clin-lyx":8}},{"path":"src/main/java/duke/exception/DukeNoDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"public class DukeNoDateException extends DukeException{","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":" public DukeNoDateException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":" super(\"there is no specific/accurate date for \"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" + msg","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":8}},{"path":"src/main/java/duke/exception/DukeNoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"public class DukeNoDescriptionException extends DukeException{","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":" public DukeNoDescriptionException(String msg){","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":" super(\"☹ OOPS!!! The description of a \" + msg + \" cannot be empty.\"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" +\"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":7}},{"path":"src/main/java/duke/exception/DukeUnknownInstruction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"public class DukeUnknownInstruction extends DukeException{","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":" public DukeUnknownInstruction(){","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":7}},{"path":"src/main/java/duke/processors/FileHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.processors;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.task.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":"public class FileHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" private final String path \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" public void fileCreate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"A new schedule is created!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"There is an existing schedule!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Cannot create the file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" public void writeFile(String msg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" FileWriter fileWriter \u003d new FileWriter(path, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" fileWriter.write(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Cannot write in this File\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" public void updateFile(String oldLine, String newLine) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":" Scanner sc \u003d new Scanner(new File(path));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":" String line \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":" if (newLine.isEmpty() \u0026\u0026 line.equals(oldLine)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Clin-lyx"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Clin-lyx"},"content":" stringBuilder.append(line).append(System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Clin-lyx"},"content":" String content \u003d stringBuilder.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Clin-lyx"},"content":" if (!newLine.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Clin-lyx"},"content":" content \u003d content.replace(oldLine, newLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Clin-lyx"},"content":" FileWriter fileWriter \u003d new FileWriter(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Clin-lyx"},"content":" fileWriter.write(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Clin-lyx"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Clin-lyx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Cannot update the File\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Clin-lyx"},"content":" public void DeleteLine(String toDelete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Clin-lyx"},"content":" updateFile(toDelete, \"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Clin-lyx"},"content":" public void readFile(ArrayList\u003cTask\u003e arrayList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Clin-lyx"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Clin-lyx"},"content":" Scanner reader \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Clin-lyx"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Clin-lyx"},"content":" String data \u003d reader.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Clin-lyx"},"content":" Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Clin-lyx"},"content":" boolean isDone \u003d data.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Clin-lyx"},"content":" String content \u003d data.substring(7);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Clin-lyx"},"content":" switch (data.substring(1, 2)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Clin-lyx"},"content":" case \"T\" :","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new ToDo(content, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Clin-lyx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Clin-lyx"},"content":" case \"D\" :","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new Deadline(content, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Clin-lyx"},"content":" break; ","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Clin-lyx"},"content":" case \"E\" :","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new Event(content, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Clin-lyx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Clin-lyx"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Clin-lyx"},"content":" \"The content of this task is in the wrong format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Clin-lyx"},"content":" + content);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Clin-lyx"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Clin-lyx"},"content":" arrayList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Clin-lyx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Cannot find the file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Clin-lyx":98}},{"path":"src/main/java/duke/processors/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.processors;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDateException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeUnknownInstruction;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"import duke.task.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" private final FileHandler duke \u003d new FileHandler();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" private final Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" private boolean terminate;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" public Parser(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" terminate \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" private void displayInfo(String msg) throws DukeUnknownInstruction","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" , DukeNoDescriptionException, DukeNoDateException{","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" if (msg.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new ToDo(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" tasks.addTasks(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" } else if (msg.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new Deadline(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" tasks.addTasks(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" } else if (msg.startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new Event(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" tasks.addTasks(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeUnknownInstruction();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" duke.writeFile(task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" ui.printNumOfTasks(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" public void readInputs(String msg) throws DukeUnknownInstruction,","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" DukeNoDescriptionException, DukeNoDateException{","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":" if (msg.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" tasks.listTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":" } else if (msg.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Clin-lyx"},"content":" this.terminate \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Clin-lyx"},"content":" boolean isKeyword \u003d msg.matches(\".*\\\\040[0-9]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Clin-lyx"},"content":" if (isKeyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Clin-lyx"},"content":" String[] part \u003d msg.split(\"\\\\s+\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Clin-lyx"},"content":" int ind \u003d Integer.parseInt(part[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Clin-lyx"},"content":" if (ind \u003e tasks.getCount() || ind \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Clin-lyx"},"content":" throw new IndexOutOfBoundsException();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Clin-lyx"},"content":" switch (part[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Clin-lyx"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Clin-lyx"},"content":" tasks.get(ind).MarkAsDone(duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Clin-lyx"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Clin-lyx"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Clin-lyx"},"content":" tasks.get(ind).MarkAsUnDone(duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Clin-lyx"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Clin-lyx"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Clin-lyx"},"content":" tasks.deleteTask(ind, duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Clin-lyx"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Clin-lyx"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"The given index is not in the available range\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Clin-lyx"},"content":" displayInfo(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Clin-lyx"},"content":" public boolean getTerminate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Clin-lyx"},"content":" return this.terminate;","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Clin-lyx":80}},{"path":"src/main/java/duke/processors/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.processors;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":" private final ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" private int count \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" public TaskList(FileHandler duke) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" duke.readFile(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" count \u003d tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" public Task get(int ind) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" return this.tasks.get(ind);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" public void addTasks(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" this.count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" public void listTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" System.out.println((i + 1) + \". \" + this.tasks.get(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" public void deleteTask(int index, FileHandler duke) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" Task delete \u003d this.tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" this.count--;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + delete.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Now you have \" + this.count + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" duke.DeleteLine(delete.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" public int getCount() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" return this.count;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Clin-lyx":45}},{"path":"src/main/java/duke/processors/TimeProcessor.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.processors;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import java.time.DayOfWeek;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":"public class TimeProcessor {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" public static String StringToDate(String info) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" LocalDate current \u003d LocalDate.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" LocalDate date;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" if (isCorrect(info, dateFormatter)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" date \u003d LocalDate.parse(info, dateFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" date \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" if(date \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" DayOfWeek endDay \u003d DayOfWeek.valueOf(info.toUpperCase());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" DayOfWeek today \u003d current.getDayOfWeek();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" int dayDiff \u003d (7 + (endDay.getValue() - today.getValue())) % 7;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" date \u003d current.plusDays(dayDiff);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" if (info.isEmpty()){","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" date \u003d current;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" if (!Character.isDigit(info.charAt(0))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Can only supports day of weeks \"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" + \"or date in format dd/MM/yyyy \"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" + \"Cannot support abbreviations \"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" +\"months \" + \"or simplified dates!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" return date \u003d\u003d null ? info :","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Clin-lyx"},"content":" private static boolean isCorrect(String info, DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Clin-lyx"},"content":" LocalDate.parse(info, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Clin-lyx"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Clin-lyx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Clin-lyx"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Clin-lyx":55}},{"path":"src/main/java/duke/processors/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.processors;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeEmptyCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" private String separation \u003d \"_______________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" public void OnEnter() {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(separation);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Hello! I am YOU\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(separation);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" public void OnExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(separation);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" public String readCommand() throws DukeEmptyCommandException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" if (command.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeEmptyCommandException();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" return command;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" public void printNumOfTasks (TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Now you have \"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" + tasks.getCount()","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" + (tasks.getCount() \u003c\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":" + \" in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(separation);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Clin-lyx"},"content":" public void showError(String err) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(err);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Clin-lyx":52}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDateException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"import duke.processors.TimeProcessor;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" public Deadline(String Description) throws DukeNoDescriptionException,","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" DukeNoDateException{","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" super(Description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" if (Description.split(\"\\\\s+\").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeNoDescriptionException(\"Deadline\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" int index \u003d Description.indexOf(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" if (index \u003d\u003d -1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeNoDateException(\"Deadline\");","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" String content \u003d Description.substring(9, index);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" String subString \u003d Description.substring(index + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" String time;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" if (subString.contains(\" \")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" int indexOfSpace \u003d subString.indexOf(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" time \u003d TimeProcessor.StringToDate(subString.substring(0, indexOfSpace));","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" time \u003d time + subString.substring(indexOfSpace);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" time \u003d TimeProcessor.StringToDate(Description.substring(index + 4));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" time \u003d Description.substring(index + 1, index + 3) + \": \" + time;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" this.Description \u003d content + \"(\" + time + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + this);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" public Deadline(String content, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" super(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":" return \"[D]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":43}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDateException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"import duke.processors.TimeProcessor;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":" public Event(String Description) throws DukeNoDescriptionException, DukeNoDateException {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" super(Description);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" if (Description.split(\"\\\\s+\").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeNoDescriptionException(\"Event\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" this.Description \u003d getContent(Description);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + this);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" public Event(String content, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" super(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" private String getContent(String Description) throws DukeNoDateException {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" String time;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" int index \u003d Description.indexOf(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" String content \u003d Description.substring(6, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" int lastIndex \u003d Description.substring(index + 1).indexOf(\"/\");","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" if (lastIndex !\u003d -1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" lastIndex +\u003d (index + 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" if (lastIndex \u003d\u003d index || Description.length() - lastIndex \u003c 7 || lastIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeNoDateException(\"Event\");","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" String startTime \u003d Description.substring(index + 6, lastIndex - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" String endTime \u003d Description.substring(lastIndex + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":" if (startTime.contains(\" \")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" int spaceIndex \u003d startTime.indexOf(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" String date \u003d TimeProcessor.StringToDate(startTime.substring(0, spaceIndex));","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":" startTime \u003d \"from: \" + date + \" \" + startTime.substring(spaceIndex + 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" startTime \u003d \"from: \" + TimeProcessor.StringToDate(startTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Clin-lyx"},"content":" time \u003d startTime + \" to: \" + TimeProcessor.StringToDate(endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Clin-lyx"},"content":" return content + \"(\" + time + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Clin-lyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Clin-lyx"},"content":" return \"[E]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":53}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.processors.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" protected String Description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" public Task(String Description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" this.Description \u003d Description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" private String GetStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" public void MarkAsDone(FileHandler fileHandler) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" String oldLine \u003d this.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" String newLine \u003d this.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" fileHandler.updateFile(oldLine, newLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + this);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" public void MarkAsUnDone(FileHandler fileHandler) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" String oldLine \u003d this.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" String newLine \u003d this.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" fileHandler.updateFile(oldLine, newLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + this);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" return GetStatusIcon() + \" \" + Description;","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":39}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":" public ToDo(String Description) throws DukeNoDescriptionException{","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" super(Description);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" if (Description.split(\"\\\\s+\").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeNoDescriptionException(\"todo\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" this.Description \u003d Description.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + this);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" public ToDo(String Description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" super(Description);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"todo read book","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"mark 1","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"todo join sports club","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"mark 4","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"todo borrow book","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"list","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":"event project meeting /from Monday 2pm /to 4pm","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":"deadline finish slides /by Sunday 2359","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":"bye","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Clin-lyx":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":"Clin-lyx"},"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":"Clin-lyx"},"content":" implementation group: \u0027com.joestelmach\u0027, name: \u0027natty\u0027, version: \u00270.6\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"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":"Clin-lyx"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":"//checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":"// toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":"//}","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-04"},{"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":{"Clin-lyx":7,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"[T][ ] borrow book","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"[E][ ] project meeting (from: Sep 4 2023 2pm to: 4pm)","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"[D][ ] finish CS2103T ip (by: Sep 3 2023 2359)","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"[E][ ] buy a computer (from: today 2pm to: 4pm)","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Clin-lyx":4}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import duke.processors.FileHandler;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"import duke.processors.Parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"import duke.processors.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"import duke.processors.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" public Duke() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" TaskList tasks \u003d new TaskList(new FileHandler());","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" parser \u003d new Parser(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" private void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" ui.OnEnter();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" new FileHandler().fileCreate();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" while (!parser.getTerminate()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" parser.readInputs(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" ui.OnExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" new Duke().run();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Clin-lyx":37,"-":4}},{"path":"src/main/java/duke/exception/DukeEmptyCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"public class DukeEmptyCommandException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":" public DukeEmptyCommandException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" super(\"A command is needed for the program to excute.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Clin-lyx":7}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" super(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Clin-lyx":8}},{"path":"src/main/java/duke/exception/DukeNoDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"public class DukeNoDateException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":" public DukeNoDateException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":" super(\"there is no specific/accurate date for \"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" + msg","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":8}},{"path":"src/main/java/duke/exception/DukeNoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"public class DukeNoDescriptionException extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":" public DukeNoDescriptionException(String msg) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":" super(\"☹ OOPS!!! The description of a \" + msg + \" cannot be empty.\"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":7}},{"path":"src/main/java/duke/exception/DukeUnknownInstruction.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"public class DukeUnknownInstruction extends DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":" public DukeUnknownInstruction() {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":" super(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":7}},{"path":"src/main/java/duke/processors/FileHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.processors;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":"public class FileHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" private final String path \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" public void fileCreate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"A new schedule is created!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"There is an existing schedule!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Cannot create the file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" public void writeFile(String msg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" FileWriter fileWriter \u003d new FileWriter(path, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" fileWriter.write(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Cannot write in this File\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" public void updateFile(String oldLine, String newLine) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":" Scanner sc \u003d new Scanner(new File(path));","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":" StringBuilder stringBuilder \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Clin-lyx"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Clin-lyx"},"content":" String line \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Clin-lyx"},"content":" if (newLine.isEmpty() \u0026\u0026 line.equals(oldLine)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Clin-lyx"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Clin-lyx"},"content":" stringBuilder.append(line).append(System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Clin-lyx"},"content":" String content \u003d stringBuilder.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Clin-lyx"},"content":" if (!newLine.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Clin-lyx"},"content":" content \u003d content.replace(oldLine, newLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Clin-lyx"},"content":" FileWriter fileWriter \u003d new FileWriter(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Clin-lyx"},"content":" fileWriter.write(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Clin-lyx"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Clin-lyx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Cannot update the File\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Clin-lyx"},"content":" public void DeleteLine(String toDelete) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Clin-lyx"},"content":" updateFile(toDelete, \"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Clin-lyx"},"content":" public void readFile(ArrayList\u003cTask\u003e arrayList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Clin-lyx"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Clin-lyx"},"content":" Scanner reader \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Clin-lyx"},"content":" while (reader.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Clin-lyx"},"content":" String data \u003d reader.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Clin-lyx"},"content":" Task task;","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Clin-lyx"},"content":" boolean isDone \u003d data.charAt(4) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Clin-lyx"},"content":" String content \u003d data.substring(7);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Clin-lyx"},"content":" switch (data.substring(1, 2)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Clin-lyx"},"content":" case \"T\" :","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new ToDo(content, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Clin-lyx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Clin-lyx"},"content":" case \"D\" :","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new Deadline(content, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Clin-lyx"},"content":" break; ","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Clin-lyx"},"content":" case \"E\" :","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new Event(content, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Clin-lyx"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Clin-lyx"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Clin-lyx"},"content":" \"The content of this task is in the wrong format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Clin-lyx"},"content":" + content);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Clin-lyx"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Clin-lyx"},"content":" arrayList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Clin-lyx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Cannot find the file\");","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Clin-lyx":101}},{"path":"src/main/java/duke/processors/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.processors;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDateException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeUnknownInstruction;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"import duke.task.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" private final FileHandler duke \u003d new FileHandler();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" private final Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" private boolean terminate;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" public Parser(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" terminate \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" private void displayInfo(String msg) throws DukeUnknownInstruction","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" , DukeNoDescriptionException, DukeNoDateException{","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" if (msg.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new ToDo(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" tasks.addTasks(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" } else if (msg.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new Deadline(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" tasks.addTasks(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" } else if (msg.startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" task \u003d new Event(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" tasks.addTasks(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeUnknownInstruction();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" duke.writeFile(task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" ui.printNumOfTasks(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" public void readInputs(String msg) throws DukeUnknownInstruction,","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" DukeNoDescriptionException, DukeNoDateException{","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":" if (msg.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" tasks.listTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":" } else if (msg.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Clin-lyx"},"content":" this.terminate \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Clin-lyx"},"content":" boolean isKeyword \u003d msg.matches(\".*\\\\040[0-9]\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Clin-lyx"},"content":" if (isKeyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Clin-lyx"},"content":" String[] part \u003d msg.split(\"\\\\s+\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Clin-lyx"},"content":" int ind \u003d Integer.parseInt(part[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Clin-lyx"},"content":" if (ind \u003e tasks.getCount() || ind \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Clin-lyx"},"content":" throw new IndexOutOfBoundsException();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Clin-lyx"},"content":" switch (part[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Clin-lyx"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Clin-lyx"},"content":" tasks.get(ind).MarkAsDone(duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Clin-lyx"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Clin-lyx"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Clin-lyx"},"content":" tasks.get(ind).MarkAsUnDone(duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Clin-lyx"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Clin-lyx"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Clin-lyx"},"content":" tasks.deleteTask(ind, duke);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Clin-lyx"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Clin-lyx"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"The given index is not in the available range\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Clin-lyx"},"content":" displayInfo(msg);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Clin-lyx"},"content":" public boolean getTerminate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Clin-lyx"},"content":" return this.terminate;","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Clin-lyx":80}},{"path":"src/main/java/duke/processors/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.processors;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":" private final ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" private int count \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" public TaskList(FileHandler duke) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" duke.readFile(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" count \u003d tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" public Task get(int ind) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" return this.tasks.get(ind);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" public void addTasks(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" this.count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" public void listTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" System.out.println((i + 1) + \". \" + this.tasks.get(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" public void deleteTask(int index, FileHandler duke) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" Task delete \u003d this.tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" this.count--;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + delete.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Now you have \" + this.count + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" duke.DeleteLine(delete.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" public int getCount() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" return this.count;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Clin-lyx":45}},{"path":"src/main/java/duke/processors/TimeProcessor.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.processors;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import java.time.DayOfWeek;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":"public class TimeProcessor {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" public static String StringToDate(String info) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" LocalDate current \u003d LocalDate.now();","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" LocalDate date;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" if (isCorrect(info, dateFormatter)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" date \u003d LocalDate.parse(info, dateFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" date \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" if(date \u003d\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" DayOfWeek endDay \u003d DayOfWeek.valueOf(info.toUpperCase());","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" DayOfWeek today \u003d current.getDayOfWeek();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" int dayDiff \u003d (7 + (endDay.getValue() - today.getValue())) % 7;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" date \u003d current.plusDays(dayDiff);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" if (info.isEmpty()){","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" date \u003d current;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" if (!Character.isDigit(info.charAt(0))) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Can only supports day of weeks \"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" + \"or date in format dd/MM/yyyy \"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" + \"Cannot support abbreviations \"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" +\"months \" + \"or simplified dates!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" return date \u003d\u003d null ? info :","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" date.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Clin-lyx"},"content":" private static boolean isCorrect(String info, DateTimeFormatter formatter) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Clin-lyx"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Clin-lyx"},"content":" LocalDate.parse(info, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Clin-lyx"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Clin-lyx"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Clin-lyx"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Clin-lyx":55}},{"path":"src/main/java/duke/processors/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.processors;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeEmptyCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" private String separation \u003d \"_______________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" public void OnEnter() {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(separation);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Hello! I am YOU\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(separation);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" public void OnExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(separation);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" public String readCommand() throws DukeEmptyCommandException {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" if (command.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeEmptyCommandException();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" return command;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" public void printNumOfTasks (TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Now you have \"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" + tasks.getCount()","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" + (tasks.getCount() \u003c\u003d 1 ? \" task\" : \" tasks\")","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":" + \" in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" public void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(separation);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Clin-lyx"},"content":" public void showError(String err) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(err);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Clin-lyx":52}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDateException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"import duke.processors.TimeProcessor;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" public Deadline(String Description) throws DukeNoDescriptionException,","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" DukeNoDateException{","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" super(Description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" if (Description.split(\"\\\\s+\").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeNoDescriptionException(\"Deadline\");","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" int index \u003d Description.indexOf(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" if (index \u003d\u003d -1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeNoDateException(\"Deadline\");","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" String content \u003d Description.substring(9, index);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" String subString \u003d Description.substring(index + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" String time;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" if (subString.contains(\" \")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" int indexOfSpace \u003d subString.indexOf(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" time \u003d TimeProcessor.StringToDate(subString.substring(0, indexOfSpace));","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" time \u003d time + subString.substring(indexOfSpace);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" time \u003d TimeProcessor.StringToDate(Description.substring(index + 4));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" time \u003d Description.substring(index + 1, index + 3) + \": \" + time;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" this.Description \u003d content + \"(\" + time + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + this);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" public Deadline(String content, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" super(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":" return \"[D]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":43}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDateException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"import duke.processors.TimeProcessor;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":" public Event(String Description) throws DukeNoDescriptionException, DukeNoDateException {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" super(Description);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" if (Description.split(\"\\\\s+\").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeNoDescriptionException(\"Event\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" this.Description \u003d getContent(Description);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + this);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" public Event(String content, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" super(content);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" private String getContent(String Description) throws DukeNoDateException {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" String time;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" int index \u003d Description.indexOf(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" String content \u003d Description.substring(6, index);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" int lastIndex \u003d Description.substring(index + 1).indexOf(\"/\");","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" if (lastIndex !\u003d -1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" lastIndex +\u003d (index + 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" if (lastIndex \u003d\u003d index || Description.length() - lastIndex \u003c 7 || lastIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeNoDateException(\"Event\");","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":" String startTime \u003d Description.substring(index + 6, lastIndex - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" String endTime \u003d Description.substring(lastIndex + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":" if (startTime.contains(\" \")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":" int spaceIndex \u003d startTime.indexOf(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Clin-lyx"},"content":" String date \u003d TimeProcessor.StringToDate(startTime.substring(0, spaceIndex));","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Clin-lyx"},"content":" startTime \u003d \"from: \" + date + \" \" + startTime.substring(spaceIndex + 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Clin-lyx"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Clin-lyx"},"content":" startTime \u003d \"from: \" + TimeProcessor.StringToDate(startTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Clin-lyx"},"content":" time \u003d startTime + \" to: \" + TimeProcessor.StringToDate(endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Clin-lyx"},"content":" return content + \"(\" + time + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"Clin-lyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"Clin-lyx"},"content":" return \"[E]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":53}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"import duke.processors.FileHandler;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":" protected String Description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" public Task(String Description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" this.Description \u003d Description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" private String GetStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" return \"[\" + (isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" public void MarkAsDone(FileHandler fileHandler) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" String oldLine \u003d this.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" String newLine \u003d this.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" fileHandler.updateFile(oldLine, newLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + this);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":" public void MarkAsUnDone(FileHandler fileHandler) {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Clin-lyx"},"content":" String oldLine \u003d this.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Clin-lyx"},"content":" String newLine \u003d this.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Clin-lyx"},"content":" fileHandler.updateFile(oldLine, newLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + this);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Clin-lyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Clin-lyx"},"content":" return GetStatusIcon() + \" \" + Description;","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":39}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"import duke.exception.DukeNoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":" public ToDo(String Description) throws DukeNoDescriptionException{","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":" super(Description);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":" if (Description.split(\"\\\\s+\").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":" throw new DukeNoDescriptionException(\"todo\");","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":" this.Description \u003d Description.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Clin-lyx"},"content":" System.out.println(\" \" + this);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Clin-lyx"},"content":" public ToDo(String Description, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Clin-lyx"},"content":" super(Description);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Clin-lyx"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Clin-lyx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Clin-lyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Clin-lyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Clin-lyx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Clin-lyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Clin-lyx"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Clin-lyx":26}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Clin-lyx"},"content":"todo read book","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Clin-lyx"},"content":"mark 1","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Clin-lyx"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Clin-lyx"},"content":"event project meeting /from Aug 6th 2pm /to 4pm","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Clin-lyx"},"content":"todo join sports club","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Clin-lyx"},"content":"mark 4","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Clin-lyx"},"content":"todo borrow book","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Clin-lyx"},"content":"list","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Clin-lyx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Clin-lyx"},"content":"event project meeting /from Monday 2pm /to 4pm","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Clin-lyx"},"content":"deadline finish slides /by Sunday 2359","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Clin-lyx"},"content":"bye","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Clin-lyx":12}}] diff --git a/Clin-lyx_ip_master/commits.json b/Clin-lyx_ip_master/commits.json index 2fbc5f33..02034dcb 100644 --- a/Clin-lyx_ip_master/commits.json +++ b/Clin-lyx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Clin-lyx":[{"date":"2023-08-23","commitResults":[{"hash":"4b85d6579fbeb3136aec7adb3d61616184d1921b","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"4badbc96d67960253b6bcb1a2e8c0200c404d7d8","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":2}}},{"hash":"9b23db72ed6bfd8ac6a2d4c3c684d8fcb086f82b","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":4}}},{"hash":"51a930ddbfa35e44fd0f040135c125ff25e138db","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":15}}},{"hash":"a5ae86906a7df096d3464829ac15d654ef72dad1","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":4}}},{"hash":"85d9931db5d86f62a573f7f243d6cec42048fb46","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":20}}},{"hash":"ede2c9f37e46625bb020cac803b1694e7174560e","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}}]},{"date":"2023-08-28","commitResults":[{"hash":"44bf6c58a72514be19e10835463df6e19f6052b9","isMergeCommit":false,"messageTitle":"Set up necessary files for TextUITesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":56,"deletions":39}}}]},{"date":"2023-08-30","commitResults":[{"hash":"ff7cf5ba5fdfb73657c07bc49f4c5d4822c43c56","isMergeCommit":false,"messageTitle":"Add FileHandler.java","messageBody":"Update Duke.java Event.java Task.java, ToDo.java, Deadline.java to\naccomodate FileHandler.java.\n\nA DukeContentWrongFormat exception to check if the txt file has\nunrecognizable tasks.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":152,"deletions":25}}},{"hash":"970fddbe291da33be288d7e1d0369641661b2358","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"3bae7eff50870795587d5ae09a2171058cb3738c","isMergeCommit":false,"messageTitle":"Implement TimeProcessir.java","messageBody":"The TimeProcessor.java handle the task to convert a string to a sepcific\nstring. However, string that are abbreviation of days of week or\nmonth cannot be converted.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":93,"deletions":20}}},{"hash":"405c7277124acd5c267dedcbf7c24b3c8bca6bdb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"311923b3bebbb34df96c1c48ba451ceac53f1553","isMergeCommit":false,"messageTitle":"Refactor functionalities of Duke.java","messageBody":"Creating Parser.java, TaskList.java, and Ui.java toseparate the\nfunctionalities of Duke.java\n","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":212,"deletions":153}}},{"hash":"ef9b3cb2c629cb6a1f38b3ade3f1df924ca23178","isMergeCommit":true,"messageTitle":"Merge branch \u0027More-OOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"fd66f79a26a40ec48876e69ee53bab0b0c1e9556","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":7},"java":{"insertions":57,"deletions":9}}},{"hash":"3d1596b87e4ccc2c0333442e4b5bd9187ca39d83","isMergeCommit":true,"messageTitle":"Merge branch \u0027packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Clin-lyx":{"java":560,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":16}},"authorContributionVariance":{"Clin-lyx":17196.438},"authorDisplayNameMap":{"Clin-lyx":"CS2103T-T12-4 LIN ..IANG"}} +{"authorDailyContributionsMap":{"Clin-lyx":[{"date":"2023-08-23","commitResults":[{"hash":"4b85d6579fbeb3136aec7adb3d61616184d1921b","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}}]},{"date":"2023-08-24","commitResults":[{"hash":"4badbc96d67960253b6bcb1a2e8c0200c404d7d8","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":2}}},{"hash":"9b23db72ed6bfd8ac6a2d4c3c684d8fcb086f82b","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":4}}},{"hash":"51a930ddbfa35e44fd0f040135c125ff25e138db","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":15}}},{"hash":"a5ae86906a7df096d3464829ac15d654ef72dad1","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":4}}},{"hash":"85d9931db5d86f62a573f7f243d6cec42048fb46","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":20}}},{"hash":"ede2c9f37e46625bb020cac803b1694e7174560e","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":10}}}]},{"date":"2023-08-28","commitResults":[{"hash":"44bf6c58a72514be19e10835463df6e19f6052b9","isMergeCommit":false,"messageTitle":"Set up necessary files for TextUITesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":56,"deletions":39}}}]},{"date":"2023-08-30","commitResults":[{"hash":"ff7cf5ba5fdfb73657c07bc49f4c5d4822c43c56","isMergeCommit":false,"messageTitle":"Add FileHandler.java","messageBody":"Update Duke.java Event.java Task.java, ToDo.java, Deadline.java to\naccomodate FileHandler.java.\n\nA DukeContentWrongFormat exception to check if the txt file has\nunrecognizable tasks.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":152,"deletions":25}}},{"hash":"970fddbe291da33be288d7e1d0369641661b2358","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"3bae7eff50870795587d5ae09a2171058cb3738c","isMergeCommit":false,"messageTitle":"Implement TimeProcessir.java","messageBody":"The TimeProcessor.java handle the task to convert a string to a sepcific\nstring. However, string that are abbreviation of days of week or\nmonth cannot be converted.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":3},"java":{"insertions":93,"deletions":20}}},{"hash":"405c7277124acd5c267dedcbf7c24b3c8bca6bdb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"311923b3bebbb34df96c1c48ba451ceac53f1553","isMergeCommit":false,"messageTitle":"Refactor functionalities of Duke.java","messageBody":"Creating Parser.java, TaskList.java, and Ui.java toseparate the\nfunctionalities of Duke.java\n","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":2},"java":{"insertions":212,"deletions":153}}},{"hash":"ef9b3cb2c629cb6a1f38b3ade3f1df924ca23178","isMergeCommit":true,"messageTitle":"Merge branch \u0027More-OOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"fd66f79a26a40ec48876e69ee53bab0b0c1e9556","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":7},"java":{"insertions":57,"deletions":9}}},{"hash":"3d1596b87e4ccc2c0333442e4b5bd9187ca39d83","isMergeCommit":true,"messageTitle":"Merge branch \u0027packages\u0027","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"d44f3df30bc38df4dec4be1d6bfa1a0a1bf15ce0","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"607a4f0fb2079c6867b80ca172fead9843d91132","isMergeCommit":false,"messageTitle":"Set up Gradle to IP","messageBody":"The gradle can now run and build the project\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":7,"deletions":1},"txt":{"insertions":1,"deletions":1},"java":{"insertions":19,"deletions":11}}}]}]},"authorFileTypeContributionMap":{"Clin-lyx":{"java":568,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":7,"txt":16}},"authorContributionVariance":{"Clin-lyx":15626.224},"authorDisplayNameMap":{"Clin-lyx":"CS2103T-T12-4 LIN ..IANG"}} diff --git a/DeltonCheng_ip_master/authorship.json b/DeltonCheng_ip_master/authorship.json index 42261586..f747c1d6 100644 --- a/DeltonCheng_ip_master/authorship.json +++ b/DeltonCheng_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"# main.Duke project template","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":"3. After that, locate the `src/main/java/main.Duke.java` file, right-click it, and choose `Run main.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DeltonCheng":2,"-":22}},{"path":"src/main/java/actions/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package actions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" private ArrayList\u003cTask\u003e taskArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" String line \u003d \"~~*~~*~~*~~*~~*~~*~~*~~*~~*~~\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" public TaskList(ArrayList\u003cTask\u003e taskArrayList){","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" this.taskArrayList \u003d taskArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" public void chadAddList(Task input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.add(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" public String chadRemoveList(int index){","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" Task removed \u003d taskArrayList.remove(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" return removed.name;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Invalid task index! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" public void chadListTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" if (taskArrayList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your task list is EMPTY!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your outstanding tasks are...\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" for (int i \u003d 0; i \u003c taskArrayList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"tasks.Task \" + (i + 1) + \") \" + taskArrayList.get(i)); //\u003c\u003c\u003c\u003c\u003c","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"\\n\" + \"Get to work NOW!\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" public void chadMarkTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.get(index - 1).isComplete \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" public void chadUnmarkTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.get(index - 1).isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":53}},{"path":"src/main/java/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import actions.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" private TaskList tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" public ArrayList\u003cTask\u003e taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" private Parser parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" private Duke() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" this.tasklist \u003d new TaskList(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" this.parser \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public static class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" public void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" ui.chadGreet();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" storage.makeNewDirectory();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" storage.makeNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" storage.loadFile(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" parser \u003d new Parser(this, taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" Scanner scanObj \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" boolean check \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" while (check) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" String input \u003d scanObj.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" String[] inputArray \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" check \u003d parser.inputParse(inputArray);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" scanObj.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" public static void main (String[]args){","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" Duke chad \u003d new Duke();","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":" chad.run();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"DeltonCheng":59,"-":1}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import main.Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import actions.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" private Duke chad;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" private TaskList tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" public Parser(Duke chad, ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" this.chad \u003d chad;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" this.tasklist \u003d new TaskList(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" public boolean inputParse(String[] inputArray) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray[0].equals(\"bye\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" ui.chadBye();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"list\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadListTask();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadMarkTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" ui.chadMarkTaskOutput(chad.taskArrayList.get(index - 1).name,","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" chad.taskArrayList.get(index - 1).getMark());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadUnmarkTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" ui.chadUnmarkTaskOutput(chad.taskArrayList.get(index - 1).name,","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":" chad.taskArrayList.get(index - 1).getMark());","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003d\u003d 1 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"DeltonCheng"},"content":" Todo newTodo \u003d new Todo(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newTodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newTodo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"deadline\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003c 2 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"DeltonCheng"},"content":" String[] details \u003d inputArray[1].split(\" /by \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"DeltonCheng"},"content":" if (details.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Umm you forgot the deadline! Remember to use /by before the deadline!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"DeltonCheng"},"content":" Deadline newDeadline \u003d new Deadline(details[0], details[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newDeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newDeadline.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"DeltonCheng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Make sure the date format is: d MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"event\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003c 2 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"DeltonCheng"},"content":" String[] details \u003d inputArray[1].split(\" /from \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"DeltonCheng"},"content":" if (details.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey you are missing the start date! Remember to use /from before the deadline!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"DeltonCheng"},"content":" String[] timings \u003d details[1].split(\" /to \", 0);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"DeltonCheng"},"content":" if (timings.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"The end date is missing! Do better! Use /to!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(timings[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(timings[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"DeltonCheng"},"content":" Event newEvent \u003d new Event(details[0], timings[0], timings[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newEvent);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newEvent.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"DeltonCheng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Make sure the date format is: d MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"DeltonCheng"},"content":" String name \u003d tasklist.chadRemoveList(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"DeltonCheng"},"content":" ui.chadRemoveOutput(name, chad.taskArrayList.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"DeltonCheng"},"content":" ui.chadOutput(\"Hmm? You are not making sense!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"DeltonCheng"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":140}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" private static final String FILE_PATH_NAME \u003d \"./data/chadBot.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public void makeNewDirectory() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" File newDir \u003d new File(\"./data\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" if (newDir.mkdirs()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Data directory has been created successfully!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Data directory was not created! (There may already exists a data directory)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" public void makeNewFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" File newFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" if (newFile.createNewFile()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"I have created this file for you: \" + newFile.getName());","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"You already have the file... Stop wasting my time\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"An error has occurred when creating the file: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" public void printFile() throws FileNotFoundException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" File chadFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" Scanner s \u003d new Scanner(chadFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(s.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" public void writeFile(ArrayList\u003cTask\u003e t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" FileWriter fw \u003d new FileWriter(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" for (Task task : t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" fw.write(task.taskToStringStore(task) + System.lineSeparator());","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" fw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"There was an error writing the file: \" + e);;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":" public Task stringToTask(String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"DeltonCheng"},"content":" String[] parts \u003d data.split(\"-\", 0);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"DeltonCheng"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"DeltonCheng"},"content":" String marked \u003d parts[1].toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"DeltonCheng"},"content":" boolean mark \u003d marked.equals(\"X\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"DeltonCheng"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"DeltonCheng"},"content":" case \"T\":","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"DeltonCheng"},"content":" Todo t \u003d new Todo(parts[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"DeltonCheng"},"content":" t.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"DeltonCheng"},"content":" return t;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"DeltonCheng"},"content":" case \"D\":","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(parts[2], parts[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(d.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"DeltonCheng"},"content":" return d;","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"DeltonCheng"},"content":" case \"E\":","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(parts[2], parts[3], parts[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"DeltonCheng"},"content":" return e;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"DeltonCheng"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"DeltonCheng"},"content":" public void loadFile(ArrayList\u003cTask\u003e task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"DeltonCheng"},"content":" File chadFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"DeltonCheng"},"content":" Scanner s \u003d new Scanner(chadFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Here are the tasks from last time:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"DeltonCheng"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"DeltonCheng"},"content":" String nextTask \u003d s.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"DeltonCheng"},"content":" Task t \u003d stringToTask(nextTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"DeltonCheng"},"content":" if (t !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"DeltonCheng"},"content":" task.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"DeltonCheng"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"File not found... Unable to load tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":108}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate date;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" public Deadline(String name, String by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" this.date \u003d LocalDate.parse(by, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" String dateString \u003d this.date.format(DateTimeFormatter.ofPattern(\"dd.MM.yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" return \"[D]\" + super.toString() + \" (by: \" + dateString + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" String dateString \u003d this.date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" return \"D-\" + super.taskToStringStore(task) + dateString;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":27}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate dateFrom;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate dateTo;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" public Event(String name, String from, String to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" this.dateFrom \u003d LocalDate.parse(from, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" this.dateTo \u003d LocalDate.parse(to, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" String dateFromString \u003d this.dateFrom.format(DateTimeFormatter.ofPattern(\"dd.MM.yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" String dateToString \u003d this.dateTo.format(DateTimeFormatter.ofPattern(\"dd.MM.yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" return \"[E]\" + super.toString() + \" (from: \" + dateFromString + \" to: \" + dateToString + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" String dateFromString \u003d this.dateFrom.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" String dateToString \u003d this.dateTo.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" return \"E-\" + super.taskToStringStore(task) + dateFromString + \"-\" + dateToString ;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":31}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"public class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":" public String name;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":" public boolean isComplete;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" public Task(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" public String getMark() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" return (isComplete ? \"X\" : \" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" return \"[\" + getMark() + \"] \" + name;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" String isCompleteString \u003d (getMark() \u003d\u003d \"X\") ? \"X\" : \"O\";","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" return isCompleteString + \"-\" + task.name + \"-\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":25}},{"path":"src/main/java/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":" public Todo(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" return \"T-\" + super.taskToStringStore(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":18}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":" String line \u003d \"~~*~~*~~*~~*~~*~~*~~*~~*~~*~~\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":" public void chadGreet() {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Yo! This is CHADbot\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Need sum help?\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" public void chadBye() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Cya l8r~\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" public void chadOutput(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" public void chadAddListOutput(String input){","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \" has been added to yo list!\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public void chadExceptionOutput(String input){","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" public void chadRemoveOutput(String input, int size){","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Okay! I have removed this task :\\n\" + input);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" if (size \u003d\u003d 0){","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your list is currently empty! Good job :)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your list is currently \" + size + \" long... Get back to work!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" public void chadMarkTaskOutput(String task, String mark){","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Good job! tasks.Task fulfilled!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(task + \" [\" + mark + \"]\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":" public void chadUnmarkTaskOutput(String task, String mark){","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Boooo! tasks.Task is not done!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(task + \" [\" + mark + \"]\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":60}},{"path":"src/test/java/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[D][ ] submit project (by: 12.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[D][X] submit project (by: 12.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringStoreTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"D-O-submit project-12 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.taskToStringStore(d));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringStoreTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"D-X-submit project-12 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.taskToStringStore(d));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_unmarked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"X\";","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"DeltonCheng":54}},{"path":"src/test/java/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"public class EventTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" public void eventToStringTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[E][ ] bootcamp (from: 12.10.2023 to: 15.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public void eventToStringTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[E][X] bootcamp (from: 12.10.2023 to: 15.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" public void eventToStringStoreTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"E-O-bootcamp-12 Oct 2023-15 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.taskToStringStore(e));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringStoreTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"E-X-bootcamp-12 Oct 2023-15 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.taskToStringStore(e));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_unmarked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"X\";","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"DeltonCheng":53}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DeltonCheng":1}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":"java -classpath ..\\bin main.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DeltonCheng":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"# main.Duke project template","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":"3. After that, locate the `src/main/java/main.Duke.java` file, right-click it, and choose `Run main.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DeltonCheng":2,"-":22}},{"path":"src/main/java/actions/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package actions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" private ArrayList\u003cTask\u003e taskArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" String line \u003d \"~~*~~*~~*~~*~~*~~*~~*~~*~~*~~\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" public TaskList(ArrayList\u003cTask\u003e taskArrayList){","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" this.taskArrayList \u003d taskArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" * Adds a task to the current ArrayList","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" * @param input the task that is to be added","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" public void chadAddList(Task input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.add(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" * Removes a list from the current ArrayList","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" * @param index of the task to be removed","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" * @return the name of the removed task","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" public String chadRemoveList(int index){","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" Task removed \u003d taskArrayList.remove(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" return removed.name;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Invalid task index! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" * Prints out the whole list of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" public void chadListTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" if (taskArrayList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your task list is EMPTY!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your outstanding tasks are...\");","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" for (int i \u003d 0; i \u003c taskArrayList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"tasks.Task \" + (i + 1) + \") \"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" + taskArrayList.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"\\n\" + \"Get to work NOW!\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":" * Marks a task as completed","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":" * @param index of task to be marked","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"DeltonCheng"},"content":" public void chadMarkTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.get(index - 1).isComplete \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"DeltonCheng"},"content":" * Unmarks a task that was previously marked","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"DeltonCheng"},"content":" * @param index of task to be unmarked","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"DeltonCheng"},"content":" public void chadUnmarkTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.get(index - 1).isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"DeltonCheng"},"content":" public void chadFindTask(String keyword) {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"DeltonCheng"},"content":" ArrayList\u003cTask\u003e matched \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"DeltonCheng"},"content":" for (Task task : taskArrayList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"DeltonCheng"},"content":" if (task.name.contains(keyword)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"DeltonCheng"},"content":" matched.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"DeltonCheng"},"content":" if (matched.isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"There are no matching tasks!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Here are the matching tasks:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"DeltonCheng"},"content":" for (int i \u003d 0; i \u003c matched.size(); i ++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(matched.get(i).toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Total of \" + matched.size() + \" matched tasks\");","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":98}},{"path":"src/main/java/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import actions.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" private TaskList tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" public ArrayList\u003cTask\u003e taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" private Parser parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" private Duke() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" this.tasklist \u003d new TaskList(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" this.parser \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" public static class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" * Runs Chadbot which includes created and initialising all directories,","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" * files and objects","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" public void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" ui.chadGreet();","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" storage.makeNewDirectory();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" storage.makeNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" storage.loadFile(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" parser \u003d new Parser(this, taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" Scanner scanObj \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" boolean check \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" while (check) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" String input \u003d scanObj.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" String[] inputArray \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" check \u003d parser.inputParse(inputArray);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" scanObj.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" public static void main (String[]args){","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":" Duke chad \u003d new Duke();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":" chad.run();","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"DeltonCheng":61,"-":1}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import main.Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import actions.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" private Duke chad;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" private TaskList tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" public Parser(Duke chad, ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" this.chad \u003d chad;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" this.tasklist \u003d new TaskList(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" * Takes in a String array of the instructions from user","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" * Runs the applicable methods based on the instruction from user","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" * @param inputArray array of string from the input of user","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" * @return false if user gives command to stop bot, else returns true","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" public boolean inputParse(String[] inputArray) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray[0].equals(\"bye\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" ui.chadBye();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"list\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadListTask();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadMarkTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" ui.chadMarkTaskOutput(chad.taskArrayList.get(index - 1).name,","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" chad.taskArrayList.get(index - 1).getMark());","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadUnmarkTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":" ui.chadUnmarkTaskOutput(chad.taskArrayList.get(index - 1).name,","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"DeltonCheng"},"content":" chad.taskArrayList.get(index - 1).getMark());","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"find\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"DeltonCheng"},"content":" String name \u003d inputArray[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadFindTask(name);","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003d\u003d 1 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"DeltonCheng"},"content":" Todo newTodo \u003d new Todo(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newTodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newTodo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"deadline\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003c 2 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"DeltonCheng"},"content":" String[] details \u003d inputArray[1].split(\" /by \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"DeltonCheng"},"content":" if (details.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Umm you forgot the deadline! Remember to use /by before the deadline!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"DeltonCheng"},"content":" Deadline newDeadline \u003d new Deadline(details[0], details[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newDeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newDeadline.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"DeltonCheng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Make sure the date format is: d MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"event\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003c 2 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"DeltonCheng"},"content":" String[] details \u003d inputArray[1].split(\" /from \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"DeltonCheng"},"content":" if (details.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey you are missing the start date! Remember to use /from before the deadline!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"DeltonCheng"},"content":" String[] timings \u003d details[1].split(\" /to \", 0);","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"DeltonCheng"},"content":" if (timings.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"The end date is missing! Do better! Use /to!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(timings[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(timings[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"DeltonCheng"},"content":" Event newEvent \u003d new Event(details[0], timings[0], timings[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newEvent);","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newEvent.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"DeltonCheng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Make sure the date format is: d MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"DeltonCheng"},"content":" String name \u003d tasklist.chadRemoveList(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"DeltonCheng"},"content":" ui.chadRemoveOutput(name, chad.taskArrayList.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"DeltonCheng"},"content":" ui.chadOutput(\"Hmm? You are not making sense!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"DeltonCheng"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":152}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" private static final String FILE_PATH_NAME \u003d \"./data/chadBot.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" * Creates a new directory for txt file if it does not exist","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" public void makeNewDirectory() {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" File newDir \u003d new File(\"./data\");","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" if (newDir.mkdirs()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Data directory has been created successfully!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Data directory was not created! (There may already exists a data directory)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" * Makes a new txt file if it does not exist","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" public void makeNewFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" File newFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" if (newFile.createNewFile()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"I have created this file for you: \" + newFile.getName());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"You already have the file... Stop wasting my time\");","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"An error has occurred when creating the file: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" * Prints out tasks that are stored in txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" * @throws FileNotFoundException if file is not found","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" public void printFile() throws FileNotFoundException {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" File chadFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" Scanner s \u003d new Scanner(chadFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(s.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":" * Writes data from the ArrayList into the txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":" * @param t is the ArrayList that contains data of all the tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"DeltonCheng"},"content":" public void writeFile(ArrayList\u003cTask\u003e t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"DeltonCheng"},"content":" FileWriter fw \u003d new FileWriter(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"DeltonCheng"},"content":" for (Task task : t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"DeltonCheng"},"content":" fw.write(task.taskToStringStore(task) + System.lineSeparator());","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"DeltonCheng"},"content":" fw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"DeltonCheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"There was an error writing the file: \" + e);;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"DeltonCheng"},"content":" * Takes a line of data from txt file and create a new Task from","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"DeltonCheng"},"content":" * the information","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"DeltonCheng"},"content":" * @param data a line of data from txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"DeltonCheng"},"content":" * @return a Task object with its respective data","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"DeltonCheng"},"content":" public Task stringToTask(String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"DeltonCheng"},"content":" String[] parts \u003d data.split(\"-\", 0);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"DeltonCheng"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"DeltonCheng"},"content":" String marked \u003d parts[1].toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"DeltonCheng"},"content":" boolean mark \u003d marked.equals(\"X\");","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"DeltonCheng"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"DeltonCheng"},"content":" case \"T\":","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"DeltonCheng"},"content":" Todo t \u003d new Todo(parts[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"DeltonCheng"},"content":" t.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"DeltonCheng"},"content":" return t;","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"DeltonCheng"},"content":" case \"D\":","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(parts[2], parts[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(d.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"DeltonCheng"},"content":" return d;","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"DeltonCheng"},"content":" case \"E\":","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(parts[2], parts[3], parts[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"DeltonCheng"},"content":" return e;","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"DeltonCheng"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"DeltonCheng"},"content":" * Loads up the txt file and adds the tasks to the ArrayList","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"DeltonCheng"},"content":" * @param task an ArrayList for data to be stored in","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"DeltonCheng"},"content":" public void loadFile(ArrayList\u003cTask\u003e task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"DeltonCheng"},"content":" File chadFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"DeltonCheng"},"content":" Scanner s \u003d new Scanner(chadFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Here are the tasks from last time:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"DeltonCheng"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"DeltonCheng"},"content":" String nextTask \u003d s.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"DeltonCheng"},"content":" Task t \u003d stringToTask(nextTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"DeltonCheng"},"content":" if (t !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"DeltonCheng"},"content":" task.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"DeltonCheng"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"File not found... Unable to load tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":135}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate date;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" public Deadline(String name, String by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" this.date \u003d LocalDate.parse(by, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" * Returns a string that represents the Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" * @return string with details of the Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" String dateString \u003d this.date.format(DateTimeFormatter.ofPattern(\"dd.MM.yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" return \"[D]\" + super.toString() + \" (by: \" + dateString + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" * Returns a string that represents the Deadline to be stored in txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" * @return a formatted string with details of the Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" String dateString \u003d this.date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" return \"D-\" + super.taskToStringStore(task) + dateString;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":36}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate dateFrom;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate dateTo;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" public Event(String name, String from, String to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" this.dateFrom \u003d LocalDate.parse(from, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" this.dateTo \u003d LocalDate.parse(to, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" * Returns a string that represents the Event","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" * @return string with details of the Event","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" String dateFromString \u003d this.dateFrom.format(DateTimeFormatter.ofPattern(\"dd.MM.yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" String dateToString \u003d this.dateTo.format(DateTimeFormatter.ofPattern(\"dd.MM.yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" return \"[E]\" + super.toString() + \" (from: \" + dateFromString + \" to: \" + dateToString + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" * Returns a string that represents the Event to be stored in txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" * @return a formatted string with details of the Event","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" String dateFromString \u003d this.dateFrom.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" String dateToString \u003d this.dateTo.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" return \"E-\" + super.taskToStringStore(task) + dateFromString + \"-\" + dateToString ;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":41}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"public class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":" public String name;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":" public boolean isComplete;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" public Task(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" * Returns a string that represents the completion status","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" * of a task","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" * @return \"X\" if task completed and an empty string if not completed","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" public String getMark() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" return (isComplete ? \"X\" : \" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" * Returns a string that represents the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" * @return string with details of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" return \"[\" + getMark() + \"] \" + name;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" * Returns a string that represents the Task to be stored in txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" * @return a formatted string with details of the Task","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" String isCompleteString \u003d (getMark() \u003d\u003d \"X\") ? \"X\" : \"O\";","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" return isCompleteString + \"-\" + task.name + \"-\";","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":42}},{"path":"src/main/java/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":" public Todo(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" * Returns a string that represents the Todo","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" * @return string with details of the Todo","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" * Returns a string that represents the Todo to be stored in txt file","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" * @return a formatted string with details of the Todo","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" return \"T-\" + super.taskToStringStore(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":28}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":" String line \u003d \"~~*~~*~~*~~*~~*~~*~~*~~*~~*~~\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" * Prints out greeting for CHADbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" public void chadGreet() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Yo! This is CHADbot\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Need sum help?\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" * Prints out goodbye message for CHADbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" public void chadBye() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Cya l8r~\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" * Prints out a string for CHADbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" * @param input string for CHADbot to print","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" public void chadOutput(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" * Prints out a task after adding it to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" * @param input name of task added to the list","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" public void chadAddListOutput(String input){","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \" has been added to yo list!\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" * Prints out the exception if faced by CHADbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" * @param input exception message to be printed","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":" public void chadExceptionOutput(String input){","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":" * Prints out the respective messages after removing a task.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"DeltonCheng"},"content":" * @param input name of task that has been removed","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"DeltonCheng"},"content":" * @param size size of list after removing the task","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"DeltonCheng"},"content":" public void chadRemoveOutput(String input, int size){","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Okay! I have removed this task :\\n\" + input);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"DeltonCheng"},"content":" if (size \u003d\u003d 0){","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your list is currently empty! Good job :)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your list is currently \" + size + \" long... Get back to work!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"DeltonCheng"},"content":" * Prints out when a task is marked","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"DeltonCheng"},"content":" * @param task name of task that has been removed","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"DeltonCheng"},"content":" * @param mark mark of completion status of task","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"DeltonCheng"},"content":" public void chadMarkTaskOutput(String task, String mark){","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Good job! \" + task + \" fulfilled!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(task + \" [\" + mark + \"]\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"DeltonCheng"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"DeltonCheng"},"content":" * Prints out when a task is unmarked","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"DeltonCheng"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"DeltonCheng"},"content":" * @param task name of task that has been removed","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"DeltonCheng"},"content":" * @param mark mark of completion status of task","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"DeltonCheng"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"DeltonCheng"},"content":" public void chadUnmarkTaskOutput(String task, String mark){","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Boooo! \" + task + \" is not done!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(task + \" [\" + mark + \"]\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"DeltonCheng"},"content":" public void chadMatchNotFoundOutput(){","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"There are no matching tasks!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"DeltonCheng"},"content":" public void chadMatchFoundOutput(String task){","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":111}},{"path":"src/test/java/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[D][ ] submit project (by: 12.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[D][X] submit project (by: 12.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringStoreTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"D-O-submit project-12 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.taskToStringStore(d));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringStoreTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"D-X-submit project-12 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.taskToStringStore(d));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_unmarked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"X\";","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"DeltonCheng":54}},{"path":"src/test/java/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"public class EventTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" public void eventToStringTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[E][ ] bootcamp (from: 12.10.2023 to: 15.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public void eventToStringTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[E][X] bootcamp (from: 12.10.2023 to: 15.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" public void eventToStringStoreTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"E-O-bootcamp-12 Oct 2023-15 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.taskToStringStore(e));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringStoreTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"E-X-bootcamp-12 Oct 2023-15 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.taskToStringStore(e));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_unmarked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"X\";","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"DeltonCheng":53}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DeltonCheng":1}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":"java -classpath ..\\bin main.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DeltonCheng":1,"-":20}}] diff --git a/DeltonCheng_ip_master/commits.json b/DeltonCheng_ip_master/commits.json index 5b455f9f..d6b26e8f 100644 --- a/DeltonCheng_ip_master/commits.json +++ b/DeltonCheng_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"DeltonCheng":[{"date":"2023-08-23","commitResults":[{"hash":"1e1e8b43d4549fb988b26d667e3b5aba4251362d","isMergeCommit":false,"messageTitle":"test 1 commit level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"dee5842fc15a7e275b9dd851c6261f1fba85cf0f","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":7}}},{"hash":"85aa774d1907edb91cdfdff4b2e9204aa7d0ba9a","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}},{"hash":"2d0291e796a98d4bd7d31c9c6c7f92e5655a2f66","isMergeCommit":false,"messageTitle":"Level-3 Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":8}}},{"hash":"70a9652abd152fd72cc3c1839971fdeb48410b47","isMergeCommit":false,"messageTitle":"Level-4 ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":8}}},{"hash":"6e080d31275a931e825c4b501bccab46eacf0f21","isMergeCommit":false,"messageTitle":"Level-5 Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":17}}},{"hash":"964e950a549a02631fec763c267cda27d66911a8","isMergeCommit":false,"messageTitle":"Level-6 Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"914e8120622c5fa4de941defd13343e1c3a9eb90","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"2c95477043b864d84a64b175e4fb3d69830da7be","isMergeCommit":false,"messageTitle":"Level-7 Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":10}}},{"hash":"2a4c9e4a37a001bf22a9912f1404c9a3944bde15","isMergeCommit":false,"messageTitle":"Level-8 Date and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":10}}}]},{"date":"2023-09-01","commitResults":[{"hash":"063a6e60ecf698e71b6e25b684b2d2c8347d5352","isMergeCommit":false,"messageTitle":"A-More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":469,"deletions":371}}},{"hash":"06e79bc7f429711c578606a87ec6116a5d1790a5","isMergeCommit":false,"messageTitle":"A-More OOP - some cleaning","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":9}}}]},{"date":"2023-09-02","commitResults":[{"hash":"22efb76eea4b203f28664ee6b88bc29e6e34ad54","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":4},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"8951268847cff49c0c44d578b38fbc34f7839f8d","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"f429314b4313c74a93e590765901c3226492eca8","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":4}}},{"hash":"82fb58f71e64bfae2a07490a49e933a7f4c4bf0a","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"DeltonCheng":{"java":628,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":1}},"authorContributionVariance":{"DeltonCheng":47328.484},"authorDisplayNameMap":{"DeltonCheng":"CS2103T-W11-3 DELT.. ZHI"}} +{"authorDailyContributionsMap":{"DeltonCheng":[{"date":"2023-08-23","commitResults":[{"hash":"1e1e8b43d4549fb988b26d667e3b5aba4251362d","isMergeCommit":false,"messageTitle":"test 1 commit level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"dee5842fc15a7e275b9dd851c6261f1fba85cf0f","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":7}}},{"hash":"85aa774d1907edb91cdfdff4b2e9204aa7d0ba9a","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}},{"hash":"2d0291e796a98d4bd7d31c9c6c7f92e5655a2f66","isMergeCommit":false,"messageTitle":"Level-3 Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":8}}},{"hash":"70a9652abd152fd72cc3c1839971fdeb48410b47","isMergeCommit":false,"messageTitle":"Level-4 ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":8}}},{"hash":"6e080d31275a931e825c4b501bccab46eacf0f21","isMergeCommit":false,"messageTitle":"Level-5 Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":17}}},{"hash":"964e950a549a02631fec763c267cda27d66911a8","isMergeCommit":false,"messageTitle":"Level-6 Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"914e8120622c5fa4de941defd13343e1c3a9eb90","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"2c95477043b864d84a64b175e4fb3d69830da7be","isMergeCommit":false,"messageTitle":"Level-7 Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":10}}},{"hash":"2a4c9e4a37a001bf22a9912f1404c9a3944bde15","isMergeCommit":false,"messageTitle":"Level-8 Date and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":10}}}]},{"date":"2023-09-01","commitResults":[{"hash":"063a6e60ecf698e71b6e25b684b2d2c8347d5352","isMergeCommit":false,"messageTitle":"A-More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":469,"deletions":371}}},{"hash":"06e79bc7f429711c578606a87ec6116a5d1790a5","isMergeCommit":false,"messageTitle":"A-More OOP - some cleaning","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":9}}}]},{"date":"2023-09-02","commitResults":[{"hash":"22efb76eea4b203f28664ee6b88bc29e6e34ad54","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":4},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"8951268847cff49c0c44d578b38fbc34f7839f8d","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"f429314b4313c74a93e590765901c3226492eca8","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":4}}},{"hash":"82fb58f71e64bfae2a07490a49e933a7f4c4bf0a","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"075bc171e3b8c8142e8ee55fa12c9b89fb16c154","isMergeCommit":false,"messageTitle":"A-JavaDoc Completed for Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":2}}}]},{"date":"2023-09-04","commitResults":[{"hash":"b21e18d6e4bdfc16871d72c47a23d15b26984fa7","isMergeCommit":false,"messageTitle":"A-JavaDoc Completed for the rest of classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":4}}},{"hash":"0766f72d37e38de8059054d4d43fa36aeef2a991","isMergeCommit":false,"messageTitle":"A-JavaDoc Completed for the rest of classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"5add3e058c1f41919d46e62990e22ce36cf5130d","isMergeCommit":false,"messageTitle":"A-CodingStandard done for all classes","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":117}}},{"hash":"7676c6d6e569db12af00091a4c4b2b20788cf810","isMergeCommit":false,"messageTitle":"Level-9","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"5ce4c68c7ea41c1eb1d6c0218ff6470973cfd6b6","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"47dce427df96f2336031f6fe100df4ea74340abd","isMergeCommit":true,"messageTitle":"Level-9 Resolve conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"990bca3e4ed89a0806d90db40c901b7ffa65f9c1","isMergeCommit":false,"messageTitle":"Level-9 Cleaning","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"288ed0130d3841806a395adfb7034024c01c7b69","isMergeCommit":true,"messageTitle":"Level- 9 Resolved conflicts part 2","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"DeltonCheng":{"java":811,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":1}},"authorContributionVariance":{"DeltonCheng":47611.133},"authorDisplayNameMap":{"DeltonCheng":"CS2103T-W11-3 DELT.. ZHI"}} diff --git a/EricXiong420_ip_master/authorship.json b/EricXiong420_ip_master/authorship.json index cab00ad0..1b62c696 100644 --- a/EricXiong420_ip_master/authorship.json +++ b/EricXiong420_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"E | 0 | birthday | 2023-04-05 | 2024-04-05","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"T | 0 | hello","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"E | 0 | birthday for tommy | 2023-04-05 | 2025-01-03","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"D | 0 | submit essay | 2023-08-07","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":4}},{"path":"src/main/java/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"public class ByeCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":3}},{"path":"src/main/java/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"public class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":" private String commandWord;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" private String[] arguments;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" public Command(String commandWord, String[] arguments) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":" this.commandWord \u003d commandWord;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" return commandWord;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" public String[] getArguments() {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" return arguments;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"EricXiong420":20}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" public Deadline(String taskName, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" super(taskName);","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" * Checks if supplied date is before the deadline","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" * @return true if given date is before deadline, false otherwise","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" public boolean isDateWithinRange(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" return date.compareTo(deadline) \u003c\u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":" * Converts Deadline object to its string representation when stored in the hard drive.","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" * @return String representation when stored in text file on user\u0027s hard drive","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" public String toData() {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" return \"D\" + \" | \" + super.toData() + \" | \" + deadline.format(DateTimeFormatter.ISO_DATE);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" deadline.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":35}},{"path":"src/main/java/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"public class DeadlineCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":3}},{"path":"src/main/java/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"public class DeleteCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":3}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"import exceptions.DateWrongOrderException;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" private LocalDate startDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":" private LocalDate endDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" public Event(String taskName, LocalDate startDate, LocalDate endDate) throws DateWrongOrderException {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" super(taskName);","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" if (startDate.isAfter(endDate)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" throw new DateWrongOrderException(startDate, endDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" * Checks if supplied date is during the event","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":" * @return true if given date is during the event, false otherwise","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" public boolean isDateWithinRange(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" return date.compareTo(startDate) \u003e\u003d 0 \u0026\u0026 date.compareTo(endDate) \u003c\u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" * Converts Event object to its string representation when stored in the hard drive.","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" * @return String representation when stored in text file on user\u0027s hard drive","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" public String toData() {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" return \"E\" + \" | \" + super.toData() + \" | \" + startDate.format(DateTimeFormatter.ISO_DATE)","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" + \" | \" + endDate.format(DateTimeFormatter.ISO_DATE);","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" startDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")),","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":" endDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":44}},{"path":"src/main/java/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"public class EventCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":3}},{"path":"src/main/java/Hachi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"import exceptions.*;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"import java.lang.reflect.Array;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":"import java.util.Date;","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":"public class Hachi {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" private static String dataPath \u003d \"./data\";","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" private static String taskPath \u003d \"./data/tasks.txt\";","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" public Hachi(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" public static void main(String[] args) throws HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" new Hachi(taskPath).run();","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" public void run() throws HachiException {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" String name \u003d \"Hachi\";","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":" TaskList taskList \u003d storage.getTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" // creating the directory and file to store the tasks in","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.getArrayList();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" // Printing opening line","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"EricXiong420"},"content":" // repeats until user types bye, which quits the program","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"EricXiong420"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"EricXiong420"},"content":" // getting command and argument separately","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"EricXiong420"},"content":" Command cmd \u003d Parser.parse(ui.getInput());","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"EricXiong420"},"content":" String command \u003d cmd.getCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"EricXiong420"},"content":" String[] arguments \u003d cmd.getArguments();","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"EricXiong420"},"content":" // main logic","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"EricXiong420"},"content":" switch (command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"EricXiong420"},"content":" case ByeCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(ByeCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"EricXiong420"},"content":" isExit \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"EricXiong420"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(ListCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(taskList.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"EricXiong420"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(MarkCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"EricXiong420"},"content":" int i \u003d Parser.parseTaskNumber(arguments[0], tasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"EricXiong420"},"content":" Task t \u003d taskList.mark(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Nice! I\u0027ve marked this task as done\\n \" + t);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"EricXiong420"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"EricXiong420"},"content":" throw new InvalidArgumentException(MarkCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"EricXiong420"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(UnmarkCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"EricXiong420"},"content":" int i \u003d Parser.parseTaskNumber(arguments[0], tasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"EricXiong420"},"content":" Task t \u003d taskList.unmark(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"OK, I\u0027ve marked this task as not done yet:\\n \" + t);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"EricXiong420"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"EricXiong420"},"content":" throw new InvalidArgumentException(UnmarkCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"EricXiong420"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(DeleteCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"EricXiong420"},"content":" int i \u003d Parser.parseTaskNumber(arguments[0], tasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"EricXiong420"},"content":" Task t \u003d taskList.remove(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Noted. I\u0027ve removed this task:\\n \" + t","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"EricXiong420"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"EricXiong420"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"EricXiong420"},"content":" throw new InvalidArgumentException(DeleteCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"EricXiong420"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(TodoCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"EricXiong420"},"content":" Todo td \u003d new Todo(Parser.parseTaskArguments(TodoCommand.COMMAND_WORD, arguments));","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"EricXiong420"},"content":" taskList.add(td);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Got it. I\u0027ve added this task:\\n \" + td","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"EricXiong420"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"EricXiong420"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(DeadlineCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"EricXiong420"},"content":" int byIndex \u003d Parser.getWordIndex(\"/by\", arguments);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"EricXiong420"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"EricXiong420"},"content":" throw new NoDeadlineException();","lastModifiedDate":"2023-08-25"},{"lineNumber":113,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"EricXiong420"},"content":" if (byIndex \u003d\u003d arguments.length - 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":115,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyDeadlineException(\"deadline\");","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"EricXiong420"},"content":" String deadlineTask \u003d String.join(\" \",","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"EricXiong420"},"content":" Arrays.copyOfRange(arguments, 0, byIndex));","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"EricXiong420"},"content":" String deadlineDate \u003d String.join(\" \",","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"EricXiong420"},"content":" Arrays.copyOfRange(arguments, byIndex + 1, arguments.length));","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"EricXiong420"},"content":" Deadline dl \u003d new Deadline(deadlineTask, LocalDate.parse(deadlineDate));","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"EricXiong420"},"content":" taskList.add(dl);","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Got it. I\u0027ve added this task:\\n \" + dl","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"EricXiong420"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"EricXiong420"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"EricXiong420"},"content":" throw new DateFormatWrongException(deadlineDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"EricXiong420"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(EventCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"EricXiong420"},"content":" int fromIndex \u003d Parser.getWordIndex(\"/from\", arguments);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"EricXiong420"},"content":" int toIndex \u003d Parser.getWordIndex(\"/to\", arguments);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"EricXiong420"},"content":" if (fromIndex \u003d\u003d -1 \u0026\u0026 toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"/from and /to\");","lastModifiedDate":"2023-08-25"},{"lineNumber":137,"author":{"gitId":"EricXiong420"},"content":" } else if (toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":138,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"/to\");","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"EricXiong420"},"content":" } else if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"/from\");","lastModifiedDate":"2023-08-25"},{"lineNumber":141,"author":{"gitId":"EricXiong420"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":142,"author":{"gitId":"EricXiong420"},"content":" String eventTask \u003d String.join(\" \",","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"EricXiong420"},"content":" Arrays.copyOfRange(arguments, 0, fromIndex));","lastModifiedDate":"2023-08-25"},{"lineNumber":144,"author":{"gitId":"EricXiong420"},"content":" String eventStartDate \u003d String.join(\" \",","lastModifiedDate":"2023-08-25"},{"lineNumber":145,"author":{"gitId":"EricXiong420"},"content":" Arrays.copyOfRange(arguments, fromIndex + 1, toIndex));","lastModifiedDate":"2023-08-25"},{"lineNumber":146,"author":{"gitId":"EricXiong420"},"content":" String eventEndDate \u003d String.join(\" \",","lastModifiedDate":"2023-08-25"},{"lineNumber":147,"author":{"gitId":"EricXiong420"},"content":" Arrays.copyOfRange(arguments, toIndex + 1, arguments.length));","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"EricXiong420"},"content":" if (eventTask.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":149,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyTaskException(\"event\");","lastModifiedDate":"2023-08-25"},{"lineNumber":150,"author":{"gitId":"EricXiong420"},"content":" } else if (eventStartDate.equals(\"\") \u0026\u0026 eventEndDate.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":151,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"start date and end date\");","lastModifiedDate":"2023-08-25"},{"lineNumber":152,"author":{"gitId":"EricXiong420"},"content":" } else if (eventEndDate.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"end date\");","lastModifiedDate":"2023-08-25"},{"lineNumber":154,"author":{"gitId":"EricXiong420"},"content":" } else if (eventStartDate.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"start date\");","lastModifiedDate":"2023-08-25"},{"lineNumber":156,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"EricXiong420"},"content":" Event ev \u003d new Event(eventTask, LocalDate.parse(eventStartDate),","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"EricXiong420"},"content":" LocalDate.parse(eventEndDate));","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"EricXiong420"},"content":" taskList.add(ev);","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Got it. I\u0027ve added this task:\\n \" + ev","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"EricXiong420"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"EricXiong420"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"EricXiong420"},"content":" throw new DateFormatWrongException(eventStartDate + \", \" + eventEndDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"EricXiong420"},"content":" case SearchdateCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(SearchdateCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"EricXiong420"},"content":" LocalDate searchDate \u003d LocalDate.parse(arguments[0]);","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"EricXiong420"},"content":" ArrayList\u003cTask\u003e filteredDates \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"EricXiong420"},"content":" tasks.forEach(task -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"EricXiong420"},"content":" if (task.isDateWithinRange(searchDate)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"EricXiong420"},"content":" filteredDates.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":177,"author":{"gitId":"EricXiong420"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(new TaskList(filteredDates).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"EricXiong420"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"EricXiong420"},"content":" throw new InvalidCommandException(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":182,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":183,"author":{"gitId":"EricXiong420"},"content":" } catch (HachiException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":184,"author":{"gitId":"EricXiong420"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":185,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":186,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":187,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":188,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":189,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"EricXiong420":189}},{"path":"src/main/java/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"public class ListCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":3}},{"path":"src/main/java/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"public class MarkCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":3}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"import exceptions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" public static Command parse(String cmd) {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" String[] words \u003d cmd.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" return new Command(words[0], Arrays.copyOfRange(words, 1, words.length));","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" public static void checkArgumentLength(String commandWord, int argumentLength)","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" throws HachiException {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" switch (commandWord) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" case ByeCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(ByeCommand.COMMAND_WORD, 0, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(ListCommand.COMMAND_WORD, 0, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(MarkCommand.COMMAND_WORD, 1, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyNumberException(MarkCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(UnmarkCommand.COMMAND_WORD, 1, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyNumberException(UnmarkCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"EricXiong420"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(DeleteCommand.COMMAND_WORD, 1, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyNumberException(DeleteCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"EricXiong420"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyTaskException(TodoCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"EricXiong420"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyTaskException(DeadlineCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"EricXiong420"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyTaskException(EventCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"EricXiong420"},"content":" case SearchdateCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(SearchdateCommand.COMMAND_WORD, 1, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"EricXiong420"},"content":" throw new DateFormatWrongException(\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"EricXiong420"},"content":" * Returns the index of a given string within a given list of strings.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"EricXiong420"},"content":" * @param word The given string to find the index of.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"EricXiong420"},"content":" * @param arg The list of string within which to search for the given string.","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"EricXiong420"},"content":" * @return The index of the given string. If string is not found, returns -1.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"EricXiong420"},"content":" public static int getWordIndex(String word, String[] arg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"EricXiong420"},"content":" int index \u003d -1;","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"EricXiong420"},"content":" for (int i \u003d 0; i \u003c arg.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"EricXiong420"},"content":" if (arg[i].equals(word)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"EricXiong420"},"content":" index \u003d i;","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"EricXiong420"},"content":" return index;","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"EricXiong420"},"content":" public static String parseTaskArguments(String taskType, String[] arg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"EricXiong420"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"EricXiong420"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"EricXiong420"},"content":" return String.join(\" \", arg);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"EricXiong420"},"content":" return \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"EricXiong420"},"content":" public static TaskList parseTaskList(List\u003cString\u003e ls) throws HachiException {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"EricXiong420"},"content":" ArrayList\u003cTask\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"EricXiong420"},"content":" for (String s : ls) {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"EricXiong420"},"content":" result.add(txtToTask(s));","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"EricXiong420"},"content":" return new TaskList(result);","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"EricXiong420"},"content":" public static int parseTaskNumber(String num, int numOfTasks)","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"EricXiong420"},"content":" throws NumberFormatException, NumberOutOfBoundsException {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"EricXiong420"},"content":" int number \u003d Integer.parseInt(num);","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"EricXiong420"},"content":" if (number \u003e numOfTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"EricXiong420"},"content":" throw new NumberOutOfBoundsException(numOfTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"EricXiong420"},"content":" return number - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"EricXiong420"},"content":" private static Task txtToTask(String txt) throws HachiException {","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"EricXiong420"},"content":" String[] s \u003d txt.split(\" \\\\| \"); // need to escape | character as it means something in regex","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"EricXiong420"},"content":" Task temp \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"EricXiong420"},"content":" // set Task to the respective task type","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"EricXiong420"},"content":" if (s[0].equals(\"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"EricXiong420"},"content":" temp \u003d new Todo(s[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"EricXiong420"},"content":" } else if (s[0].equals(\"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"EricXiong420"},"content":" temp \u003d new Deadline(s[2], LocalDate.parse(s[3]));","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"EricXiong420"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"EricXiong420"},"content":" throw new DateFormatWrongException(s[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"EricXiong420"},"content":" } else if (s[0].equals(\"E\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"EricXiong420"},"content":" temp \u003d new Event(s[2], LocalDate.parse(s[3]), LocalDate.parse(s[4]));","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"EricXiong420"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"EricXiong420"},"content":" throw new DateFormatWrongException(s[3] + \", \" + s[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"EricXiong420"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"EricXiong420"},"content":" System.out.println(\"Task stored in the wrong format! Please check the file at \u0027data/tasks.txt\u0027\");","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"EricXiong420"},"content":" // mark task based on \u00270\u0027 or \u00271\u0027 in the file","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"EricXiong420"},"content":" if (s[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"EricXiong420"},"content":" temp.mark();","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"EricXiong420"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"EricXiong420"},"content":" temp.unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"EricXiong420"},"content":" return temp;","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"EricXiong420":159}},{"path":"src/main/java/SearchdateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"public class SearchdateCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"search-date\";","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":3}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"import exceptions.HachiException;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" private Path currentPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" private static String DEFAULT_PATH \u003d \"./data/tasks.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" public Storage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" this(DEFAULT_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":" Path path \u003d Paths.get(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" currentPath \u003d path;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" public TaskList getTaskList() throws HachiException {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" if (!Files.exists(currentPath)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" Files.createDirectories(currentPath.getParent());","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" Files.createFile(currentPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" currentPath \u003d currentPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" return Parser.parseTaskList(Files.readAllLines(currentPath));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" throw new HachiException(\"Unable to read file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":" private static void appendToFile(File file, String textToAdd) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":" FileWriter fw \u003d new FileWriter(file, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"EricXiong420"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"EricXiong420"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"EricXiong420"},"content":" public void updateTaskFile(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"EricXiong420"},"content":" File taskPath \u003d currentPath.toFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"EricXiong420"},"content":" // clear file first","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"EricXiong420"},"content":" new FileWriter(taskPath).close();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"EricXiong420"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"EricXiong420"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"EricXiong420"},"content":" // add every task in current task list","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"EricXiong420"},"content":" taskList.iter(task -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"EricXiong420"},"content":" appendToFile(taskPath, task.toData() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"EricXiong420"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"EricXiong420"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"EricXiong420"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":69}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" private boolean completed \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" private String taskName \u003d \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" public void mark() {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" this.completed \u003d true;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" public void unmark() {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" this.completed \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" * Method to be overriden by tasks that have dates. For tasks without, always returns false.","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" * @return false","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" public boolean isDateWithinRange(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" * Converts Task object to its string representation when stored in the hard drive.","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" * @return String representation when stored in text file on user\u0027s hard drive","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" public String toData() {","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" return (completed ? \"1\" : \"0\") + \" | \" + taskName;","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" String checkbox \u003d \"[\" + (completed ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" return checkbox + \" \" + taskName;","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":42}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"import java.util.function.Consumer;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" public Task mark(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" taskList.get(i).mark();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" return taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" public Task unmark(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" taskList.get(i).unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" return taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" public Task remove(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" return taskList.remove(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" public void add(Task t) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" taskList.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" public ArrayList\u003cTask\u003e getArrayList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" return this.taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" public void iter(Consumer\u003c? super Task\u003e c) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" taskList.forEach(c);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":" result +\u003d (num + \". \" + taskList.get(i) + \"/n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"EricXiong420"},"content":" return result;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":48}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":" public Todo(String taskName) {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" super(taskName);","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":" * Converts Todo object to its string representation when stored in the hard drive.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" * @return String representation when stored in text file on user\u0027s hard drive","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" public String toData() {","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" return \"T\" + \" | \" + super.toData();","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":21}},{"path":"src/main/java/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"public class TodoCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":3}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" private static String name \u003d \"Hachi\";","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" private final Scanner in;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" private final PrintStream out;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" public Ui() {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" this.out \u003d out;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" * Returns true of the user raw input line should be ignored.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" * Input should be ignored if it is a comment, is whitespace or is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" * @param rawInputLine the raw user input line.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" * @return true if the user raw input line should be ignored.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" private boolean shouldIgnore(String rawInputLine) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" return rawInputLine.trim().isEmpty() || isCommentLine(rawInputLine);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" * Returns true if the raw user input line is a comment.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" * @param rawInputLine the raw user input line.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":" * @return true if the raw user input line is a comment.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" private boolean isCommentLine(String rawInputLine) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" return rawInputLine.trim().matches(\"#.*\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":" * Returns the next command typed by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"EricXiong420"},"content":" * @return the next non-ignored command typed by the user","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"EricXiong420"},"content":" public String getInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"EricXiong420"},"content":" String input \u003d in.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"EricXiong420"},"content":" // do not take into account ignored lines","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"EricXiong420"},"content":" while (shouldIgnore(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"EricXiong420"},"content":" input \u003d in.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"EricXiong420"},"content":" return input;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"EricXiong420"},"content":" * Prints out the welcome message.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"EricXiong420"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"EricXiong420"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"EricXiong420"},"content":" out.println(\"What\u0027s good my bro! People round these parts call me \" + name","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"EricXiong420"},"content":" + \".\\nWhat can I do for ya sonny?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"EricXiong420"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"EricXiong420"},"content":" * Prints out the error message of the exception","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"EricXiong420"},"content":" public void showError(Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"EricXiong420"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"EricXiong420"},"content":" public void showMessage(String msg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"EricXiong420"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"EricXiong420"},"content":" out.println(msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"EricXiong420"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"EricXiong420"},"content":" * Prints out the UI line element.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"EricXiong420"},"content":" public static void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"EricXiong420"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"EricXiong420":88}},{"path":"src/main/java/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"public class UnmarkCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":3}},{"path":"src/main/java/exceptions/DateFormatWrongException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class DateFormatWrongException extends HachiException {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public DateFormatWrongException(String date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"Your date is in the wrong format (%s). \" +","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" \"Please enter the date in this format: yyyy-mm-dd\", date));","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"EricXiong420":8}},{"path":"src/main/java/exceptions/DateWrongOrderException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"public class DateWrongOrderException extends HachiException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" public DateWrongOrderException(LocalDate startDate, LocalDate endDate) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"Your end date (%s) is before your start date (%s). \" +","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" \"Are you sure you entered them in the right order?\",","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" endDate.format(DateTimeFormatter.ISO_DATE),","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" startDate.format(DateTimeFormatter.ISO_DATE)));","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"EricXiong420":13}},{"path":"src/main/java/exceptions/EmptyDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class EmptyDeadlineException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public EmptyDeadlineException(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! The /by of a %s cannot be empty.\", task));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/EmptyNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class EmptyNumberException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public EmptyNumberException(String check) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! Please indicate which task you wish to %s\", check));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/EmptyTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class EmptyTaskException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public EmptyTaskException(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! The description of a %s cannot be empty.\", task));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/EventDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class EventDateException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public EventDateException(String missing) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! Missing %s. Please input using this format: \" +","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" \"\\\"event \u003cdescription\u003e /from \u003cstart date\u003e /to \u003cend date\u003e\\\"\", missing));","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":8}},{"path":"src/main/java/exceptions/HachiException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class HachiException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public HachiException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class InvalidArgumentException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public InvalidArgumentException(String cmd) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"Invalid argument for command \\\"%s\\\"\", cmd));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class InvalidCommandException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public InvalidCommandException(String cmd) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what \\\"%s\\\" means :-(\", cmd));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/NoDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class NoDeadlineException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public NoDeadlineException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(\"☹ OOPS!!! Missing deadline, please input using this format:\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" \" \\\"deadline \u003cdescription\u003e /by \u003cdeadline\u003e\\\"\");","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":8}},{"path":"src/main/java/exceptions/NumberOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class NumberOutOfBoundsException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public NumberOutOfBoundsException(int num) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! Task number is out of bounds. You only have %d tasks currently.\", num));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/TooManyArgumentsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class TooManyArgumentsException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public TooManyArgumentsException(String cmd, int expected, int actual) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! Expected %d arguments for command \\\"%s\\\", instead got %d\",","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" expected, cmd, actual));","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":8}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"todo clean kitchen","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"deadline submit report /by Dec 9th","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"event santa claus /from Dec 25th /to when he leaves","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"mark 2","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"mark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"unmark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":"list","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":9}},{"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":"EricXiong420"},"content":"java -classpath ../bin Hachi \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"EricXiong420":1,"-":37}}] +[{"path":"data/tasks.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"E | 0 | birthday | 2023-04-05 | 2024-04-05","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"T | 0 | hello","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"E | 0 | birthday for tommy | 2023-04-05 | 2025-01-03","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"D | 0 | submit essay | 2023-08-07","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":4}},{"path":"src/main/java/exceptions/DateFormatWrongException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class DateFormatWrongException extends HachiException {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public DateFormatWrongException(String date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"Your date is in the wrong format (%s). \" +","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" \"Please enter the date in this format: yyyy-mm-dd\", date));","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"EricXiong420":8}},{"path":"src/main/java/exceptions/DateWrongOrderException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"public class DateWrongOrderException extends HachiException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" public DateWrongOrderException(LocalDate startDate, LocalDate endDate) {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"Your end date (%s) is before your start date (%s). \" +","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" \"Are you sure you entered them in the right order?\",","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" endDate.format(DateTimeFormatter.ISO_DATE),","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" startDate.format(DateTimeFormatter.ISO_DATE)));","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"EricXiong420":13}},{"path":"src/main/java/exceptions/EmptyDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class EmptyDeadlineException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public EmptyDeadlineException(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! The /by of a %s cannot be empty.\", task));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/EmptyNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class EmptyNumberException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public EmptyNumberException(String check) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! Please indicate which task you wish to %s\", check));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/EmptyTaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class EmptyTaskException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public EmptyTaskException(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! The description of a %s cannot be empty.\", task));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/EventDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class EventDateException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public EventDateException(String missing) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! Missing %s. Please input using this format: \" +","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" \"\\\"event \u003cdescription\u003e /from \u003cstart date\u003e /to \u003cend date\u003e\\\"\", missing));","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":8}},{"path":"src/main/java/exceptions/HachiException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class HachiException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public HachiException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/InvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class InvalidArgumentException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public InvalidArgumentException(String cmd) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"Invalid argument for command \\\"%s\\\"\", cmd));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class InvalidCommandException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public InvalidCommandException(String cmd) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what \\\"%s\\\" means :-(\", cmd));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/NoDeadlineException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class NoDeadlineException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public NoDeadlineException() {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(\"☹ OOPS!!! Missing deadline, please input using this format:\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" \" \\\"deadline \u003cdescription\u003e /by \u003cdeadline\u003e\\\"\");","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":8}},{"path":"src/main/java/exceptions/NumberOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class NumberOutOfBoundsException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public NumberOutOfBoundsException(int num) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! Task number is out of bounds. You only have %d tasks currently.\", num));","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":7}},{"path":"src/main/java/exceptions/TooManyArgumentsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package exceptions;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class TooManyArgumentsException extends HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public TooManyArgumentsException(String cmd, int expected, int actual) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" super(String.format(\"☹ OOPS!!! Expected %d arguments for command \\\"%s\\\", instead got %d\",","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" expected, cmd, actual));","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":8}},{"path":"src/main/java/hachi/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class ByeCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":5}},{"path":"src/main/java/hachi/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class Command {","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" private String commandWord;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" private String[] arguments;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" public Command(String commandWord, String[] arguments) {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" this.commandWord \u003d commandWord;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" this.arguments \u003d arguments;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" return commandWord;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" public String[] getArguments() {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" return arguments;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"EricXiong420":22}},{"path":"src/main/java/hachi/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":" public Deadline(String taskName, LocalDate deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" super(taskName);","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" * Checks if supplied date is before the deadline","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" * @return true if given date is before deadline, false otherwise","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" public boolean isDateWithinRange(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" return date.compareTo(deadline) \u003c\u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" * Converts hachi.task.Deadline object to its string representation when stored in the hard drive.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" * @return String representation when stored in text file on user\u0027s hard drive","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" public String toData() {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" return \"D\" + \" | \" + super.toData() + \" | \" + deadline.format(DateTimeFormatter.ISO_DATE);","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" deadline.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":37}},{"path":"src/main/java/hachi/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class DeadlineCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":5}},{"path":"src/main/java/hachi/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class DeleteCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":5}},{"path":"src/main/java/hachi/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import exceptions.DateWrongOrderException;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" private LocalDate startDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" private LocalDate endDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" public Event(String taskName, LocalDate startDate, LocalDate endDate) throws DateWrongOrderException {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" super(taskName);","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" if (startDate.isAfter(endDate)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" throw new DateWrongOrderException(startDate, endDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":" * Checks if supplied date is during the event","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" * @return true if given date is during the event, false otherwise","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" public boolean isDateWithinRange(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" return date.compareTo(startDate) \u003e\u003d 0 \u0026\u0026 date.compareTo(endDate) \u003c\u003d 0;","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" * Converts hachi.task.Event object to its string representation when stored in the hard drive.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" * @return String representation when stored in text file on user\u0027s hard drive","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" public String toData() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" return \"E\" + \" | \" + super.toData() + \" | \" + startDate.format(DateTimeFormatter.ISO_DATE)","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":" + \" | \" + endDate.format(DateTimeFormatter.ISO_DATE);","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":" return String.format(\"[E]%s (from: %s to: %s)\", super.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":" startDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")),","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":" endDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":46}},{"path":"src/main/java/hachi/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class EventCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":5}},{"path":"src/main/java/hachi/Hachi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.main;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import exceptions.*;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"import java.io.File;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":"import java.lang.reflect.Array;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":"import java.util.Date;","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":"public class Hachi {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" private static String dataPath \u003d \"./data\";","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" private static String taskPath \u003d \"./data/tasks.txt\";","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" private Ui ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" public Hachi(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" public static void main(String[] args) throws HachiException {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" new Hachi(taskPath).run();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" public void run() throws HachiException {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":" String name \u003d \"Hachi\";","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" TaskList taskList \u003d storage.getTaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" // creating the directory and file to store the tasks in","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" ArrayList\u003cTask\u003e tasks \u003d taskList.getArrayList();","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":" // Printing opening line","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"EricXiong420"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"EricXiong420"},"content":" // repeats until user types bye, which quits the program","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"EricXiong420"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"EricXiong420"},"content":" // getting command and argument separately","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"EricXiong420"},"content":" Command cmd \u003d Parser.parse(ui.getInput());","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"EricXiong420"},"content":" String command \u003d cmd.getCommand();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"EricXiong420"},"content":" String[] arguments \u003d cmd.getArguments();","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"EricXiong420"},"content":" // main logic","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"EricXiong420"},"content":" switch (command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"EricXiong420"},"content":" case ByeCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(ByeCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"EricXiong420"},"content":" isExit \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"EricXiong420"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(ListCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(taskList.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"EricXiong420"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(MarkCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"EricXiong420"},"content":" int i \u003d Parser.parseTaskNumber(arguments[0], tasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"EricXiong420"},"content":" Task t \u003d taskList.mark(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Nice! I\u0027ve marked this task as done\\n \" + t);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"EricXiong420"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"EricXiong420"},"content":" throw new InvalidArgumentException(MarkCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"EricXiong420"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(UnmarkCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"EricXiong420"},"content":" int i \u003d Parser.parseTaskNumber(arguments[0], tasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"EricXiong420"},"content":" Task t \u003d taskList.unmark(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"OK, I\u0027ve marked this task as not done yet:\\n \" + t);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"EricXiong420"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"EricXiong420"},"content":" throw new InvalidArgumentException(UnmarkCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"EricXiong420"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(DeleteCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"EricXiong420"},"content":" int i \u003d Parser.parseTaskNumber(arguments[0], tasks.size());","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"EricXiong420"},"content":" Task t \u003d taskList.remove(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Noted. I\u0027ve removed this task:\\n \" + t","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"EricXiong420"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"EricXiong420"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"EricXiong420"},"content":" throw new InvalidArgumentException(DeleteCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":101,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"EricXiong420"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(TodoCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"EricXiong420"},"content":" Todo td \u003d new Todo(Parser.parseTaskArguments(TodoCommand.COMMAND_WORD, arguments));","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"EricXiong420"},"content":" taskList.add(td);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Got it. I\u0027ve added this task:\\n \" + td","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"EricXiong420"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"EricXiong420"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(DeadlineCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"EricXiong420"},"content":" int byIndex \u003d Parser.getWordIndex(\"/by\", arguments);","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"EricXiong420"},"content":" if (byIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"EricXiong420"},"content":" throw new NoDeadlineException();","lastModifiedDate":"2023-08-25"},{"lineNumber":115,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"EricXiong420"},"content":" if (byIndex \u003d\u003d arguments.length - 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyDeadlineException(\"deadline\");","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"EricXiong420"},"content":" String deadlineTask \u003d String.join(\" \",","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"EricXiong420"},"content":" Arrays.copyOfRange(arguments, 0, byIndex));","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"EricXiong420"},"content":" String deadlineDate \u003d String.join(\" \",","lastModifiedDate":"2023-08-25"},{"lineNumber":122,"author":{"gitId":"EricXiong420"},"content":" Arrays.copyOfRange(arguments, byIndex + 1, arguments.length));","lastModifiedDate":"2023-08-25"},{"lineNumber":123,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"EricXiong420"},"content":" Deadline dl \u003d new Deadline(deadlineTask, LocalDate.parse(deadlineDate));","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"EricXiong420"},"content":" taskList.add(dl);","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Got it. I\u0027ve added this task:\\n \" + dl","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"EricXiong420"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"EricXiong420"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"EricXiong420"},"content":" throw new DateFormatWrongException(deadlineDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"EricXiong420"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(EventCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"EricXiong420"},"content":" int fromIndex \u003d Parser.getWordIndex(\"/from\", arguments);","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"EricXiong420"},"content":" int toIndex \u003d Parser.getWordIndex(\"/to\", arguments);","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"EricXiong420"},"content":" if (fromIndex \u003d\u003d -1 \u0026\u0026 toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":138,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"/from and /to\");","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"EricXiong420"},"content":" } else if (toIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"/to\");","lastModifiedDate":"2023-08-25"},{"lineNumber":141,"author":{"gitId":"EricXiong420"},"content":" } else if (fromIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":142,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"/from\");","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"EricXiong420"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":144,"author":{"gitId":"EricXiong420"},"content":" String eventTask \u003d String.join(\" \",","lastModifiedDate":"2023-08-25"},{"lineNumber":145,"author":{"gitId":"EricXiong420"},"content":" Arrays.copyOfRange(arguments, 0, fromIndex));","lastModifiedDate":"2023-08-25"},{"lineNumber":146,"author":{"gitId":"EricXiong420"},"content":" String eventStartDate \u003d String.join(\" \",","lastModifiedDate":"2023-08-25"},{"lineNumber":147,"author":{"gitId":"EricXiong420"},"content":" Arrays.copyOfRange(arguments, fromIndex + 1, toIndex));","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"EricXiong420"},"content":" String eventEndDate \u003d String.join(\" \",","lastModifiedDate":"2023-08-25"},{"lineNumber":149,"author":{"gitId":"EricXiong420"},"content":" Arrays.copyOfRange(arguments, toIndex + 1, arguments.length));","lastModifiedDate":"2023-08-25"},{"lineNumber":150,"author":{"gitId":"EricXiong420"},"content":" if (eventTask.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":151,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyTaskException(\"event\");","lastModifiedDate":"2023-08-25"},{"lineNumber":152,"author":{"gitId":"EricXiong420"},"content":" } else if (eventStartDate.equals(\"\") \u0026\u0026 eventEndDate.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"start date and end date\");","lastModifiedDate":"2023-08-25"},{"lineNumber":154,"author":{"gitId":"EricXiong420"},"content":" } else if (eventEndDate.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"end date\");","lastModifiedDate":"2023-08-25"},{"lineNumber":156,"author":{"gitId":"EricXiong420"},"content":" } else if (eventStartDate.equals(\"\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"EricXiong420"},"content":" throw new EventDateException(\"start date\");","lastModifiedDate":"2023-08-25"},{"lineNumber":158,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":159,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":160,"author":{"gitId":"EricXiong420"},"content":" Event ev \u003d new Event(eventTask, LocalDate.parse(eventStartDate),","lastModifiedDate":"2023-08-27"},{"lineNumber":161,"author":{"gitId":"EricXiong420"},"content":" LocalDate.parse(eventEndDate));","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"EricXiong420"},"content":" taskList.add(ev);","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(\"Got it. I\u0027ve added this task:\\n \" + ev","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"EricXiong420"},"content":" + String.format(\"\\nNow you have %d tasks in the list.\", tasks.size()));","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"EricXiong420"},"content":" storage.updateTaskFile(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"EricXiong420"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"EricXiong420"},"content":" throw new DateFormatWrongException(eventStartDate + \", \" + eventEndDate);","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"EricXiong420"},"content":" case SearchdateCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"EricXiong420"},"content":" Parser.checkArgumentLength(SearchdateCommand.COMMAND_WORD, arguments.length);","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"EricXiong420"},"content":" LocalDate searchDate \u003d LocalDate.parse(arguments[0]);","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"EricXiong420"},"content":" ArrayList\u003cTask\u003e filteredDates \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"EricXiong420"},"content":" tasks.forEach(task -\u003e {","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"EricXiong420"},"content":" if (task.isDateWithinRange(searchDate)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"EricXiong420"},"content":" filteredDates.add(task);","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":179,"author":{"gitId":"EricXiong420"},"content":" });","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"EricXiong420"},"content":" ui.showMessage(new TaskList(filteredDates).toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":181,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"EricXiong420"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"EricXiong420"},"content":" throw new InvalidCommandException(command);","lastModifiedDate":"2023-08-25"},{"lineNumber":184,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":185,"author":{"gitId":"EricXiong420"},"content":" } catch (HachiException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":186,"author":{"gitId":"EricXiong420"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-25"},{"lineNumber":187,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":188,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":189,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":190,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":191,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"EricXiong420":191}},{"path":"src/main/java/hachi/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class ListCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":5}},{"path":"src/main/java/hachi/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class MarkCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":5}},{"path":"src/main/java/hachi/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import exceptions.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" public static Command parse(String cmd) {","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" String[] words \u003d cmd.split(\" \");","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" return new Command(words[0], Arrays.copyOfRange(words, 1, words.length));","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" public static void checkArgumentLength(String commandWord, int argumentLength)","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" throws HachiException {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" switch (commandWord) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":" case ByeCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(ByeCommand.COMMAND_WORD, 0, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(ListCommand.COMMAND_WORD, 0, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(MarkCommand.COMMAND_WORD, 1, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyNumberException(MarkCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(UnmarkCommand.COMMAND_WORD, 1, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyNumberException(UnmarkCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"EricXiong420"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(DeleteCommand.COMMAND_WORD, 1, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyNumberException(DeleteCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"EricXiong420"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyTaskException(TodoCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"EricXiong420"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyTaskException(DeadlineCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"EricXiong420"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"EricXiong420"},"content":" throw new EmptyTaskException(EventCommand.COMMAND_WORD);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"EricXiong420"},"content":" case SearchdateCommand.COMMAND_WORD:","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003e 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"EricXiong420"},"content":" throw new TooManyArgumentsException(SearchdateCommand.COMMAND_WORD, 1, argumentLength);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"EricXiong420"},"content":" if (argumentLength \u003c 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"EricXiong420"},"content":" throw new DateFormatWrongException(\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"EricXiong420"},"content":" * Returns the index of a given string within a given list of strings.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"EricXiong420"},"content":" * @param word The given string to find the index of.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"EricXiong420"},"content":" * @param arg The list of string within which to search for the given string.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"EricXiong420"},"content":" * @return The index of the given string. If string is not found, returns -1.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"EricXiong420"},"content":" public static int getWordIndex(String word, String[] arg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"EricXiong420"},"content":" int index \u003d -1;","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"EricXiong420"},"content":" for (int i \u003d 0; i \u003c arg.length; i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"EricXiong420"},"content":" if (arg[i].equals(word)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"EricXiong420"},"content":" index \u003d i;","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"EricXiong420"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"EricXiong420"},"content":" return index;","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"EricXiong420"},"content":" public static String parseTaskArguments(String taskType, String[] arg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"EricXiong420"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"EricXiong420"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"EricXiong420"},"content":" return String.join(\" \", arg);","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"EricXiong420"},"content":" return \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"EricXiong420"},"content":" public static TaskList parseTaskList(List\u003cString\u003e ls) throws HachiException {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"EricXiong420"},"content":" ArrayList\u003cTask\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"EricXiong420"},"content":" for (String s : ls) {","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"EricXiong420"},"content":" result.add(txtToTask(s));","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"EricXiong420"},"content":" return new TaskList(result);","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"EricXiong420"},"content":" public static int parseTaskNumber(String num, int numOfTasks)","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"EricXiong420"},"content":" throws NumberFormatException, NumberOutOfBoundsException {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"EricXiong420"},"content":" int number \u003d Integer.parseInt(num);","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"EricXiong420"},"content":" if (number \u003e numOfTasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"EricXiong420"},"content":" throw new NumberOutOfBoundsException(numOfTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"EricXiong420"},"content":" return number - 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"EricXiong420"},"content":" private static Task txtToTask(String txt) throws HachiException {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"EricXiong420"},"content":" String[] s \u003d txt.split(\" \\\\| \"); // need to escape | character as it means something in regex","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"EricXiong420"},"content":" Task temp \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"EricXiong420"},"content":" // set Task to the respective task type","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"EricXiong420"},"content":" if (s[0].equals(\"T\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"EricXiong420"},"content":" temp \u003d new Todo(s[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"EricXiong420"},"content":" } else if (s[0].equals(\"D\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"EricXiong420"},"content":" temp \u003d new Deadline(s[2], LocalDate.parse(s[3]));","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"EricXiong420"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"EricXiong420"},"content":" throw new DateFormatWrongException(s[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"EricXiong420"},"content":" } else if (s[0].equals(\"E\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"EricXiong420"},"content":" temp \u003d new Event(s[2], LocalDate.parse(s[3]), LocalDate.parse(s[4]));","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"EricXiong420"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"EricXiong420"},"content":" throw new DateFormatWrongException(s[3] + \", \" + s[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"EricXiong420"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"EricXiong420"},"content":" System.out.println(\"Task stored in the wrong format! Please check the file at \u0027data/tasks.txt\u0027\");","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"EricXiong420"},"content":" // mark task based on \u00270\u0027 or \u00271\u0027 in the file","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"EricXiong420"},"content":" if (s[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"EricXiong420"},"content":" temp.mark();","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"EricXiong420"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"EricXiong420"},"content":" temp.unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"EricXiong420"},"content":" return temp;","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"EricXiong420":161}},{"path":"src/main/java/hachi/SearchdateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class SearchdateCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"search-date\";","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":5}},{"path":"src/main/java/hachi/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import exceptions.HachiException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" private Path currentPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" private static String DEFAULT_PATH \u003d \"./data/tasks.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" public Storage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" this(DEFAULT_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" Path path \u003d Paths.get(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" currentPath \u003d path;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" public TaskList getTaskList() throws HachiException {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" if (!Files.exists(currentPath)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" Files.createDirectories(currentPath.getParent());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" Files.createFile(currentPath);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" currentPath \u003d currentPath;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" return Parser.parseTaskList(Files.readAllLines(currentPath));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" throw new HachiException(\"Unable to read file\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"EricXiong420"},"content":" private static void appendToFile(File file, String textToAdd) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"EricXiong420"},"content":" FileWriter fw \u003d new FileWriter(file, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"EricXiong420"},"content":" fw.write(textToAdd);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"EricXiong420"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"EricXiong420"},"content":" public void updateTaskFile(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"EricXiong420"},"content":" File taskPath \u003d currentPath.toFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"EricXiong420"},"content":" // clear file first","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"EricXiong420"},"content":" new FileWriter(taskPath).close();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"EricXiong420"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"EricXiong420"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"EricXiong420"},"content":" // add every task in current task list","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"EricXiong420"},"content":" taskList.iter(task -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"EricXiong420"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"EricXiong420"},"content":" appendToFile(taskPath, task.toData() + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"EricXiong420"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"EricXiong420"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"EricXiong420"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":71}},{"path":"src/main/java/hachi/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"public class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" private boolean completed \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" private String taskName \u003d \"\";","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" public void mark() {","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" this.completed \u003d true;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" public void unmark() {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" this.completed \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" * Method to be overriden by tasks that have dates. For tasks without, always returns false.","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" * @return false","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" public boolean isDateWithinRange(LocalDate date) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" return false;","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" * Converts Task object to its string representation when stored in the hard drive.","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" * @return String representation when stored in text file on user\u0027s hard drive","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" public String toData() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" return (completed ? \"1\" : \"0\") + \" | \" + taskName;","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" String checkbox \u003d \"[\" + (completed ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":" return checkbox + \" \" + taskName;","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":44}},{"path":"src/main/java/hachi/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"import java.util.function.Consumer;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" public Task mark(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" taskList.get(i).mark();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" return taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" public Task unmark(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":" taskList.get(i).unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" return taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" public Task remove(int i) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":" return taskList.remove(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" public void add(Task t) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" taskList.add(t);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" public ArrayList\u003cTask\u003e getArrayList() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" return this.taskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":" public void iter(Consumer\u003c? super Task\u003e c) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" taskList.forEach(c);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":" result +\u003d (num + \". \" + taskList.get(i) + \"/n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"EricXiong420"},"content":" return result;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":48}},{"path":"src/main/java/hachi/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":" public Todo(String taskName) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":" super(taskName);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":" * Converts Todo object to its string representation when stored in the hard drive.","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":" * @return String representation when stored in text file on user\u0027s hard drive","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" public String toData() {","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" return \"T\" + \" | \" + super.toData();","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":23}},{"path":"src/main/java/hachi/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class TodoCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":5}},{"path":"src/main/java/hachi/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":" private static String name \u003d \"Hachi\";","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"EricXiong420"},"content":" private final Scanner in;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"EricXiong420"},"content":" private final PrintStream out;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"EricXiong420"},"content":" public Ui() {","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"EricXiong420"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"EricXiong420"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"EricXiong420"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"EricXiong420"},"content":" this.out \u003d out;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"EricXiong420"},"content":" * Returns true of the user raw input line should be ignored.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"EricXiong420"},"content":" * Input should be ignored if it is a comment, is whitespace or is empty.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"EricXiong420"},"content":" * @param rawInputLine the raw user input line.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"EricXiong420"},"content":" * @return true if the user raw input line should be ignored.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"EricXiong420"},"content":" private boolean shouldIgnore(String rawInputLine) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"EricXiong420"},"content":" return rawInputLine.trim().isEmpty() || isCommentLine(rawInputLine);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"EricXiong420"},"content":" * Returns true if the raw user input line is a comment.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"EricXiong420"},"content":" * @param rawInputLine the raw user input line.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"EricXiong420"},"content":" * @return true if the raw user input line is a comment.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"EricXiong420"},"content":" private boolean isCommentLine(String rawInputLine) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"EricXiong420"},"content":" return rawInputLine.trim().matches(\"#.*\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"EricXiong420"},"content":" * Returns the next command typed by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"EricXiong420"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"EricXiong420"},"content":" * @return the next non-ignored command typed by the user","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"EricXiong420"},"content":" public String getInput() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"EricXiong420"},"content":" String input \u003d in.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"EricXiong420"},"content":" // do not take into account ignored lines","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"EricXiong420"},"content":" while (shouldIgnore(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"EricXiong420"},"content":" input \u003d in.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"EricXiong420"},"content":" return input;","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"EricXiong420"},"content":" * Prints out the welcome message.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"EricXiong420"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"EricXiong420"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"EricXiong420"},"content":" out.println(\"What\u0027s good my bro! People round these parts call me \" + name","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"EricXiong420"},"content":" + \".\\nWhat can I do for ya sonny?\");","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"EricXiong420"},"content":" showLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"EricXiong420"},"content":" * Prints out the error message of the exception","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"EricXiong420"},"content":" public void showError(Exception e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"EricXiong420"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"EricXiong420"},"content":" public void showMessage(String msg) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"EricXiong420"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"EricXiong420"},"content":" out.println(msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"EricXiong420"},"content":" showLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"EricXiong420"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"EricXiong420"},"content":" * Prints out the UI line element.","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"EricXiong420"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"EricXiong420"},"content":" public static void showLine() {","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"EricXiong420"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"EricXiong420"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"EricXiong420":90}},{"path":"src/main/java/hachi/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"package hachi.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"public class UnmarkCommand {","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"EricXiong420":5}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"EricXiong420"},"content":"todo clean kitchen","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"EricXiong420"},"content":"deadline submit report /by Dec 9th","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"EricXiong420"},"content":"event santa claus /from Dec 25th /to when he leaves","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"EricXiong420"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"EricXiong420"},"content":"mark 2","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"EricXiong420"},"content":"mark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"EricXiong420"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"EricXiong420"},"content":"unmark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"EricXiong420"},"content":"list","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"EricXiong420":9}},{"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":"EricXiong420"},"content":"java -classpath ../bin Hachi \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"EricXiong420":1,"-":37}}] diff --git a/EricXiong420_ip_master/commits.json b/EricXiong420_ip_master/commits.json index 23e2ab92..c809aed0 100644 --- a/EricXiong420_ip_master/commits.json +++ b/EricXiong420_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"EricXiong420":[{"date":"2023-08-24","commitResults":[{"hash":"4e3bb86578e399c7eced22a92b9e2d6b1d7ddbef","isMergeCommit":false,"messageTitle":"Level 0. Renamed Chatbot and wrote skeletal version that prints a hello and goodbye message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"97fabf3d11edd5e4e2adf5404529e290dccdcd0d","isMergeCommit":false,"messageTitle":"Makes the program echo user inputs","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":16}}},{"hash":"c42392458e64dd10e29efc1ae5c068e84760ed58","isMergeCommit":false,"messageTitle":"Allows the building of a list storing data","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"1ee8b38d506ce7cf88e60e1c2ece568d16b054f6","isMergeCommit":false,"messageTitle":"Adds checkboxes to the list that can be marked and unmarked","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":14}}},{"hash":"a590e8fc873d2b02c60fbf2166edab151d2eb6cc","isMergeCommit":false,"messageTitle":"Adds three types of tasks which each have their representation","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":32}}},{"hash":"8cb6194d9c2183e62452e4d8d6b25e720ea840a8","isMergeCommit":false,"messageTitle":"Added semi-automated testing under text-ui-test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":156,"deletions":22},"sh":{"insertions":1,"deletions":1}}},{"hash":"3c012da93d7f467764b406e70d2b2199b2a21305","isMergeCommit":false,"messageTitle":"Added and catches every possible exception in the program","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"03ad3920fe227a5e20829012dec3ee44863ebe1b","isMergeCommit":false,"messageTitle":"Added the delete command","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":24}}}]},{"date":"2023-08-26","commitResults":[{"hash":"18f018ce5a30bac8d3553dc27db5769910275888","isMergeCommit":false,"messageTitle":"Allow saving and loading tasks from hard drive","messageBody":"Tasks are currently saved in an ArrayList, which disappears when the\nprogram restarts.\n\nSaving the tasks such that they are persistent will make the program\nmore useful and prevent data from being lost when the program quits.\n\nLet\u0027s store the tasks in a text file in the data directory and update it\naccordingly when the task list changes, and obtain tasks from it when\nthe program starts.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":128,"deletions":3}}},{"hash":"ce4a95895b54bbbd6d21b6effe325de2603c536f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"f42dc7f7e98bd6c738cabbe3a123c72df2011a9a","isMergeCommit":false,"messageTitle":"Allow chatbot to understand dates and times","messageBody":"Previously, chatbot saved dates only as strings, which meant the user\ncould put in anything and it would have been accepted.\n\nSaving dates as actual dates would allow better error checking and more\nfiltering functionality.\n\nLet\u0027s save dates and print it out in a certain format, and add in a\nsearch date function to demonstrate it\u0027s utility.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":141,"deletions":37}}},{"hash":"d2b247d6b936e0656f653cecccafbe1c7702f835","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"daaedcfb940ef890cdb097f4e80f0172fee52818","isMergeCommit":false,"messageTitle":"Add Ui, Parser, Command, Storage objects","messageBody":"Previously, the program was not as Object-Oriented.\n\nIn order to make the code more readable, the code will be split into the\n4 files mentioned above, as well as Command objects.\n\nSo far, have implemented some methods in Ui, Parser, and Command.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":88,"deletions":11}}}]},{"date":"2023-08-31","commitResults":[{"hash":"df90b53d8cd27eeb87a6dedde152477767f3dbcd","isMergeCommit":false,"messageTitle":"Move corresponding code to their objects","messageBody":"Code in Hachi.java was not completely separated out into separate\nobjects.\n\nLet\u0027s move the code to their respective objects, making the code more\nobject-oriented.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":0,"deletions":0}}},{"hash":"86e5409120990d2c614bb827a10b4fff6c13fb69","isMergeCommit":false,"messageTitle":"Move code to their respective objects","messageBody":"The previous commit only included one file.\n\nLet\u0027s commit the rest of the files that will help make the code more\nobject oriented.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":427,"deletions":228}}},{"hash":"0fb998f509f12cf2a35c1f07ea3cc49e751640b6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"EricXiong420":{"java":836,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":13}},"authorContributionVariance":{"EricXiong420":45504.09},"authorDisplayNameMap":{"EricXiong420":"CS2103-T16-2 XION..N BO"}} +{"authorDailyContributionsMap":{"EricXiong420":[{"date":"2023-08-24","commitResults":[{"hash":"4e3bb86578e399c7eced22a92b9e2d6b1d7ddbef","isMergeCommit":false,"messageTitle":"Level 0. Renamed Chatbot and wrote skeletal version that prints a hello and goodbye message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-25","commitResults":[{"hash":"97fabf3d11edd5e4e2adf5404529e290dccdcd0d","isMergeCommit":false,"messageTitle":"Makes the program echo user inputs","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":16}}},{"hash":"c42392458e64dd10e29efc1ae5c068e84760ed58","isMergeCommit":false,"messageTitle":"Allows the building of a list storing data","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"1ee8b38d506ce7cf88e60e1c2ece568d16b054f6","isMergeCommit":false,"messageTitle":"Adds checkboxes to the list that can be marked and unmarked","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":14}}},{"hash":"a590e8fc873d2b02c60fbf2166edab151d2eb6cc","isMergeCommit":false,"messageTitle":"Adds three types of tasks which each have their representation","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":32}}},{"hash":"8cb6194d9c2183e62452e4d8d6b25e720ea840a8","isMergeCommit":false,"messageTitle":"Added semi-automated testing under text-ui-test","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":156,"deletions":22},"sh":{"insertions":1,"deletions":1}}},{"hash":"3c012da93d7f467764b406e70d2b2199b2a21305","isMergeCommit":false,"messageTitle":"Added and catches every possible exception in the program","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}},{"hash":"03ad3920fe227a5e20829012dec3ee44863ebe1b","isMergeCommit":false,"messageTitle":"Added the delete command","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":24}}}]},{"date":"2023-08-26","commitResults":[{"hash":"18f018ce5a30bac8d3553dc27db5769910275888","isMergeCommit":false,"messageTitle":"Allow saving and loading tasks from hard drive","messageBody":"Tasks are currently saved in an ArrayList, which disappears when the\nprogram restarts.\n\nSaving the tasks such that they are persistent will make the program\nmore useful and prevent data from being lost when the program quits.\n\nLet\u0027s store the tasks in a text file in the data directory and update it\naccordingly when the task list changes, and obtain tasks from it when\nthe program starts.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":128,"deletions":3}}},{"hash":"ce4a95895b54bbbd6d21b6effe325de2603c536f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"f42dc7f7e98bd6c738cabbe3a123c72df2011a9a","isMergeCommit":false,"messageTitle":"Allow chatbot to understand dates and times","messageBody":"Previously, chatbot saved dates only as strings, which meant the user\ncould put in anything and it would have been accepted.\n\nSaving dates as actual dates would allow better error checking and more\nfiltering functionality.\n\nLet\u0027s save dates and print it out in a certain format, and add in a\nsearch date function to demonstrate it\u0027s utility.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":2},"java":{"insertions":141,"deletions":37}}},{"hash":"d2b247d6b936e0656f653cecccafbe1c7702f835","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"daaedcfb940ef890cdb097f4e80f0172fee52818","isMergeCommit":false,"messageTitle":"Add Ui, Parser, Command, Storage objects","messageBody":"Previously, the program was not as Object-Oriented.\n\nIn order to make the code more readable, the code will be split into the\n4 files mentioned above, as well as Command objects.\n\nSo far, have implemented some methods in Ui, Parser, and Command.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":88,"deletions":11}}}]},{"date":"2023-08-31","commitResults":[{"hash":"df90b53d8cd27eeb87a6dedde152477767f3dbcd","isMergeCommit":false,"messageTitle":"Move corresponding code to their objects","messageBody":"Code in Hachi.java was not completely separated out into separate\nobjects.\n\nLet\u0027s move the code to their respective objects, making the code more\nobject-oriented.\n","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":5},"java":{"insertions":0,"deletions":0}}},{"hash":"86e5409120990d2c614bb827a10b4fff6c13fb69","isMergeCommit":false,"messageTitle":"Move code to their respective objects","messageBody":"The previous commit only included one file.\n\nLet\u0027s commit the rest of the files that will help make the code more\nobject oriented.\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":427,"deletions":228}}},{"hash":"0fb998f509f12cf2a35c1f07ea3cc49e751640b6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"795024fa1ad8410fd04d8668510acfa4700ac66c","isMergeCommit":false,"messageTitle":"Organise the class into a package","messageBody":"The classes were originally not within a package.\n\nLet\u0027s put them all into one package called hachi.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":2}}},{"hash":"96804166e234183fb84c622d1b697a0e441bdfd9","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"EricXiong420":{"java":872,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":13}},"authorContributionVariance":{"EricXiong420":37424.387},"authorDisplayNameMap":{"EricXiong420":"CS2103-T16-2 XION..N BO"}} diff --git a/Fallman2_ip_master/authorship.json b/Fallman2_ip_master/authorship.json index af0e7b42..7f71af3c 100644 --- a/Fallman2_ip_master/authorship.json +++ b/Fallman2_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" archiveBaseName \u003d \"puke\"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" mainClassName \u003d \"puke.Main\"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Fallman2":2,"-":41}},{"path":"src/main/java/puke/Puke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"public class Puke {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" public Puke() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" tasks \u003d new TaskList(DataHandler.loadDatabase());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" new File(\"ListData.txt\").createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" ui.startup();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" String command \u003d ui.command();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" String input \u003d ui.input();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" ui.line();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" Command next;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" next \u003d Parser.parse(command, input);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" next \u003d new ErrorCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" next.execute(tasks, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" isExit \u003d next.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" new Puke().run();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":"class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" protected String tag;","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" protected boolean done;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" protected Task(String tag, String description) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" if (tag.isEmpty() || description.isEmpty()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" * Marks a task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" public void mark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":" this.done \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Fallman2"},"content":" * Unmarks a task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Fallman2"},"content":" public void unmark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"Fallman2"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"Fallman2"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Fallman2"},"content":" return description;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the task that can be stored and read later when the program is initiated again.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Fallman2"},"content":" int checked \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Fallman2"},"content":" if (this.done) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Fallman2"},"content":" checked \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Fallman2"},"content":" return String.format(\"%s/%d/%s\", this.tag, checked , this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation to be displayed in the to do list.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"Fallman2"},"content":" String status \u003d \"[ ]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"Fallman2"},"content":" if (done) {","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"Fallman2"},"content":" status \u003d \"[X]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":104,"author":{"gitId":"Fallman2"},"content":" return String.format(\"%s%s %s\", this.tag, status, this.description);","lastModifiedDate":"2023-08-22"},{"lineNumber":105,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":106,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":107,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":108,"author":{"gitId":"Fallman2"},"content":"class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":109,"author":{"gitId":"Fallman2"},"content":" private final static String tag \u003d \"[T]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":111,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Fallman2"},"content":" * Creates a Task with no set deadline or time period.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Fallman2"},"content":" * @param desc The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Fallman2"},"content":" public ToDo(String desc) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":118,"author":{"gitId":"Fallman2"},"content":" super(tag, desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":121,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":122,"author":{"gitId":"Fallman2"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":123,"author":{"gitId":"Fallman2"},"content":" private final static String tag \u003d \"[D]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":124,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime date;","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":126,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Fallman2"},"content":" * Creates a Task with a set deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Fallman2"},"content":" * @param all All strings from the remainder of the input after being split","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Fallman2"},"content":" public Deadline(String[] all) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":133,"author":{"gitId":"Fallman2"},"content":" super(tag, all[0]);","lastModifiedDate":"2023-08-22"},{"lineNumber":134,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Fallman2"},"content":" this.date \u003d LocalDateTime.parse(all[1].split(\"by \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Fallman2"},"content":" } catch (Exception DateTimeParseException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-22"},{"lineNumber":138,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":139,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":140,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":141,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"Fallman2"},"content":" * Creates a Deadline Task using input from the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"Fallman2"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"Fallman2"},"content":" * @param date The date of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"Fallman2"},"content":" * @return The Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is detected e.g. the file is corrupted.","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"Fallman2"},"content":" public static Deadline construct(String desc, String date) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"Fallman2"},"content":" String[] container \u003d new String[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Fallman2"},"content":" container[0] \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Fallman2"},"content":" container[1] \u003d \"by \" + date;","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"Fallman2"},"content":" return new Deadline(container);","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is stored in the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"Fallman2"},"content":" return super.write() + \"/\" + this.date;","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is used for Displaying in the to do list.","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"Fallman2"},"content":" * @return a String representation","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":172,"author":{"gitId":"Fallman2"},"content":" return super.toString() + \" (by: \" + this.date + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":173,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":174,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":175,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":176,"author":{"gitId":"Fallman2"},"content":"class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":177,"author":{"gitId":"Fallman2"},"content":" private static final String tag \u003d \"[E]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":178,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":181,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"Fallman2"},"content":" * Creates a task with a start and end time","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"Fallman2"},"content":" * @param all All Strings from the remainder of the input line after the command string.","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"Fallman2"},"content":" public Event(String[] all) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":188,"author":{"gitId":"Fallman2"},"content":" super(tag, all[0]);","lastModifiedDate":"2023-08-22"},{"lineNumber":189,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"Fallman2"},"content":" this.from \u003d LocalDateTime.parse(all[1].split(\"from \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"Fallman2"},"content":" this.to \u003d LocalDateTime.parse(all[2].split(\"to \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"Fallman2"},"content":" } catch (Exception DateTimeParseException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"Fallman2"},"content":" System.out.println(all[1].split(\"from \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-22"},{"lineNumber":195,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":196,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":197,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":198,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"Fallman2"},"content":" * Creates an Event task using data stored in the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"Fallman2"},"content":" * @param desc Description of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"Fallman2"},"content":" * @param from Start date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"Fallman2"},"content":" * @param to Ending date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"Fallman2"},"content":" * @return The Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is detected e.g. the file is corrupted.","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"Fallman2"},"content":" public static Event construct(String desc, String from, String to) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"Fallman2"},"content":" String[] container \u003d new String[3];","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"Fallman2"},"content":" container[0] \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"Fallman2"},"content":" container[1] \u003d \"from \" + from;","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"Fallman2"},"content":" container[2] \u003d \"to \" + to;","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"Fallman2"},"content":" return new Event(container);","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is stored in the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"Fallman2"},"content":" return super.write() + \"/\" + this.from + \"/\" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is used for Displaying in the to do list.","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":231,"author":{"gitId":"Fallman2"},"content":" return super.toString() + \" (from: \" + this.from + \" \" +","lastModifiedDate":"2023-08-22"},{"lineNumber":232,"author":{"gitId":"Fallman2"},"content":" \"to: \" + this.to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":233,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":234,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":235,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":236,"author":{"gitId":"Fallman2"},"content":"class PukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":237,"author":{"gitId":"Fallman2"},"content":" public PukeException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":238,"author":{"gitId":"Fallman2"},"content":" super(\"Unfortunately, the circumstances preceding this has necessitated that I issue and apology for the input that I have received is unrecognised.\");","lastModifiedDate":"2023-08-22"},{"lineNumber":239,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":240,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":241,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"Fallman2"},"content":"class DataHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"Fallman2"},"content":" * Interprets a line from the ListData.txt file used to store events.","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"Fallman2"},"content":" * @param input a line from the file","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"Fallman2"},"content":" * @return a corresponding task.","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an invalid task is detected.","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"Fallman2"},"content":" public static Task translate(String input) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"Fallman2"},"content":" String[] split \u003d input.split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"Fallman2"},"content":" Task output;","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"Fallman2"},"content":" if (split[0].equals(\"[T]\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"Fallman2"},"content":" output \u003d new ToDo(split[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"Fallman2"},"content":" } else if (split[0].equals(\"[D]\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"Fallman2"},"content":" output \u003d Deadline.construct(split[2], split[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"Fallman2"},"content":" } else if (split[0].equals(\"[E]\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"Fallman2"},"content":" output \u003d Event.construct(split[2], split[3], split[4]);","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"Fallman2"},"content":" if (split[1].equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"Fallman2"},"content":" output.unmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"Fallman2"},"content":" } else if (split[1].equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"Fallman2"},"content":" output.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"Fallman2"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":276,"author":{"gitId":"Fallman2"},"content":" * Updates the ListData.txt file with the latest list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":277,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":278,"author":{"gitId":"Fallman2"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":279,"author":{"gitId":"Fallman2"},"content":" * @throws IOException If an error occurs with the file writer.","lastModifiedDate":"2023-08-31"},{"lineNumber":280,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"Fallman2"},"content":" public static void writeToDatabase(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"Fallman2"},"content":" FileWriter fw \u003d new FileWriter(\"ListData.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"Fallman2"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"Fallman2"},"content":" for (Task item:taskList.getList()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"Fallman2"},"content":" output.append(item.write()).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"Fallman2"},"content":" fw.write(output.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"Fallman2"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":292,"author":{"gitId":"Fallman2"},"content":" * Loads the events stored in the ListData.txt file when the program is run.","lastModifiedDate":"2023-08-31"},{"lineNumber":293,"author":{"gitId":"Fallman2"},"content":" * If an invalid line is detected, it is skipped.","lastModifiedDate":"2023-08-31"},{"lineNumber":294,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":295,"author":{"gitId":"Fallman2"},"content":" * @return The Task List","lastModifiedDate":"2023-08-31"},{"lineNumber":296,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the file is not found.","lastModifiedDate":"2023-08-31"},{"lineNumber":297,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":298,"author":{"gitId":"Fallman2"},"content":" public static ArrayList\u003cTask\u003e loadDatabase() throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":299,"author":{"gitId":"Fallman2"},"content":" Scanner sc;","lastModifiedDate":"2023-08-30"},{"lineNumber":300,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":301,"author":{"gitId":"Fallman2"},"content":" sc \u003d new Scanner(new File(\"ListData.txt\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":302,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":303,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":304,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":305,"author":{"gitId":"Fallman2"},"content":" ArrayList\u003cTask\u003e output \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":306,"author":{"gitId":"Fallman2"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"Fallman2"},"content":" output.add(DataHandler.translate(sc.nextLine()));","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"Fallman2"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":311,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"Fallman2"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":314,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":315,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":316,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":317,"author":{"gitId":"Fallman2"},"content":" * Clears all stored tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":318,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":319,"author":{"gitId":"Fallman2"},"content":" * @throws IOException If an error occurs with the FileWriter.","lastModifiedDate":"2023-08-31"},{"lineNumber":320,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":321,"author":{"gitId":"Fallman2"},"content":" public static void clearAll() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":322,"author":{"gitId":"Fallman2"},"content":" FileWriter fw \u003d new FileWriter(\"ListData.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":323,"author":{"gitId":"Fallman2"},"content":" fw.write(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":324,"author":{"gitId":"Fallman2"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":325,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":326,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":327,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":328,"author":{"gitId":"Fallman2"},"content":"class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":329,"author":{"gitId":"Fallman2"},"content":" private final ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-31"},{"lineNumber":330,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":331,"author":{"gitId":"Fallman2"},"content":" TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":332,"author":{"gitId":"Fallman2"},"content":" this.list \u003d new ArrayList\u003cTask\u003e(100);","lastModifiedDate":"2023-08-30"},{"lineNumber":333,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":334,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":335,"author":{"gitId":"Fallman2"},"content":" TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":336,"author":{"gitId":"Fallman2"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":337,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":338,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":339,"author":{"gitId":"Fallman2"},"content":" String printOut() {","lastModifiedDate":"2023-08-30"},{"lineNumber":340,"author":{"gitId":"Fallman2"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":341,"author":{"gitId":"Fallman2"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":342,"author":{"gitId":"Fallman2"},"content":" for (Task s : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":343,"author":{"gitId":"Fallman2"},"content":" sb.append(String.format(\"%d. %s\\n\", i, s.toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":344,"author":{"gitId":"Fallman2"},"content":" i++;","lastModifiedDate":"2023-08-30"},{"lineNumber":345,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":346,"author":{"gitId":"Fallman2"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":347,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":348,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":349,"author":{"gitId":"Fallman2"},"content":" Task get(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":350,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":351,"author":{"gitId":"Fallman2"},"content":" return list.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":352,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":353,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":354,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":355,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":356,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":357,"author":{"gitId":"Fallman2"},"content":" ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":358,"author":{"gitId":"Fallman2"},"content":" return this.list;","lastModifiedDate":"2023-08-30"},{"lineNumber":359,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":360,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":361,"author":{"gitId":"Fallman2"},"content":" void add(Task t) {","lastModifiedDate":"2023-08-30"},{"lineNumber":362,"author":{"gitId":"Fallman2"},"content":" this.list.add(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":363,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":364,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":365,"author":{"gitId":"Fallman2"},"content":" Task delete(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":366,"author":{"gitId":"Fallman2"},"content":" Task hold;","lastModifiedDate":"2023-08-30"},{"lineNumber":367,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":368,"author":{"gitId":"Fallman2"},"content":" hold \u003d list.get(index - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":369,"author":{"gitId":"Fallman2"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":370,"author":{"gitId":"Fallman2"},"content":" return hold;","lastModifiedDate":"2023-08-30"},{"lineNumber":371,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":372,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":373,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":374,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":375,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":376,"author":{"gitId":"Fallman2"},"content":" String find(String key) {","lastModifiedDate":"2023-08-31"},{"lineNumber":377,"author":{"gitId":"Fallman2"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":378,"author":{"gitId":"Fallman2"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":379,"author":{"gitId":"Fallman2"},"content":" for (Task s : list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":380,"author":{"gitId":"Fallman2"},"content":" if (s.getDescription().contains(key)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":381,"author":{"gitId":"Fallman2"},"content":" sb.append(String.format(\"%d. %s\\n\", i, s.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":382,"author":{"gitId":"Fallman2"},"content":" i++;","lastModifiedDate":"2023-08-31"},{"lineNumber":383,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":384,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":385,"author":{"gitId":"Fallman2"},"content":" return sb.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":386,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":387,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":388,"author":{"gitId":"Fallman2"},"content":" void mark(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":389,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":390,"author":{"gitId":"Fallman2"},"content":" list.get(index - 1).mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":391,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":392,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":393,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":394,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":395,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":396,"author":{"gitId":"Fallman2"},"content":" void unmark(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":397,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":398,"author":{"gitId":"Fallman2"},"content":" list.get(index - 1).unmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":399,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":400,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":401,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":402,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":403,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":404,"author":{"gitId":"Fallman2"},"content":" int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":405,"author":{"gitId":"Fallman2"},"content":" return list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":406,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":407,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":408,"author":{"gitId":"Fallman2"},"content":" void clear() {","lastModifiedDate":"2023-08-30"},{"lineNumber":409,"author":{"gitId":"Fallman2"},"content":" this.list.clear();","lastModifiedDate":"2023-08-30"},{"lineNumber":410,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":411,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":412,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":413,"author":{"gitId":"Fallman2"},"content":"abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":414,"author":{"gitId":"Fallman2"},"content":" private final boolean exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":415,"author":{"gitId":"Fallman2"},"content":" protected boolean isValid;","lastModifiedDate":"2023-08-31"},{"lineNumber":416,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":417,"author":{"gitId":"Fallman2"},"content":" Command(boolean exit, boolean valid) {","lastModifiedDate":"2023-08-30"},{"lineNumber":418,"author":{"gitId":"Fallman2"},"content":" this.exit \u003d exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":419,"author":{"gitId":"Fallman2"},"content":" this.isValid \u003d valid;","lastModifiedDate":"2023-08-31"},{"lineNumber":420,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":421,"author":{"gitId":"Fallman2"},"content":" abstract void execute(TaskList tl, Ui ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":422,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":423,"author":{"gitId":"Fallman2"},"content":" boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":424,"author":{"gitId":"Fallman2"},"content":" return this.exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":425,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":426,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":427,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":428,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":429,"author":{"gitId":"Fallman2"},"content":"class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":430,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":431,"author":{"gitId":"Fallman2"},"content":" ExitCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":432,"author":{"gitId":"Fallman2"},"content":" super(rest.isEmpty(), rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":433,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":434,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":435,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":436,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":437,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":438,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":439,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":440,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":441,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":442,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":443,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-08-31"},{"lineNumber":444,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":445,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":446,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":447,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.exit());","lastModifiedDate":"2023-08-30"},{"lineNumber":448,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":449,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":450,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":451,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":452,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ExitCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":453,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":454,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":455,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":456,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":457,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":458,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":459,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":460,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":461,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":462,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":463,"author":{"gitId":"Fallman2"},"content":"class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":464,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":465,"author":{"gitId":"Fallman2"},"content":" ListCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":466,"author":{"gitId":"Fallman2"},"content":" super(false, rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":467,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":468,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":469,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":470,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":471,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":472,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":473,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":474,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":475,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":476,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":477,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-08-31"},{"lineNumber":478,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":479,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":480,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":481,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":482,"author":{"gitId":"Fallman2"},"content":" System.out.println(tl.printOut());","lastModifiedDate":"2023-08-30"},{"lineNumber":483,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":484,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":485,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":486,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":487,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":488,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ListCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":489,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":490,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-08-31"},{"lineNumber":491,"author":{"gitId":"Fallman2"},"content":" * @return a boolean","lastModifiedDate":"2023-08-31"},{"lineNumber":492,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":493,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":494,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":495,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":496,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":497,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":498,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":499,"author":{"gitId":"Fallman2"},"content":"class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":500,"author":{"gitId":"Fallman2"},"content":" private final int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":501,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":502,"author":{"gitId":"Fallman2"},"content":" MarkCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":503,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":504,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-08-30"},{"lineNumber":505,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":506,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":507,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":508,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":509,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format or an index is out of bounds, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":510,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":511,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":512,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":513,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":514,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":515,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":516,"author":{"gitId":"Fallman2"},"content":" tl.mark(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":517,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.mark(this.index));","lastModifiedDate":"2023-08-30"},{"lineNumber":518,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":519,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":520,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":521,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":522,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":523,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":524,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":525,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":526,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":527,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() and is an instance of MarkCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":528,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":529,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-08-31"},{"lineNumber":530,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":531,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":532,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":533,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":534,"author":{"gitId":"Fallman2"},"content":" return (other instanceof MarkCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":535,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":536,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":537,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":538,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the command","lastModifiedDate":"2023-08-31"},{"lineNumber":539,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":540,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":541,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":542,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":543,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":544,"author":{"gitId":"Fallman2"},"content":" return \"mark \" + this.index;","lastModifiedDate":"2023-08-31"},{"lineNumber":545,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":546,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":547,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":548,"author":{"gitId":"Fallman2"},"content":"class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":549,"author":{"gitId":"Fallman2"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":550,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":551,"author":{"gitId":"Fallman2"},"content":" UnmarkCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":552,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":553,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":554,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":555,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":556,"author":{"gitId":"Fallman2"},"content":" this.index \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":557,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":558,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":559,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":560,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":561,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":562,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format or an index is out of bounds, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":563,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":564,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":565,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":566,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":567,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":568,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":569,"author":{"gitId":"Fallman2"},"content":" tl.unmark(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":570,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.unmark());","lastModifiedDate":"2023-08-31"},{"lineNumber":571,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":572,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":573,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":574,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":575,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":576,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":577,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":578,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":579,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":580,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() and is an instance of UnmarkCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":581,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":582,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-08-31"},{"lineNumber":583,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":584,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":585,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":586,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":587,"author":{"gitId":"Fallman2"},"content":" return (other instanceof UnmarkCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":588,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":589,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":590,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":591,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the command","lastModifiedDate":"2023-08-31"},{"lineNumber":592,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":593,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":594,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":595,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":596,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":597,"author":{"gitId":"Fallman2"},"content":" return \"unmark \" + this.index;","lastModifiedDate":"2023-08-31"},{"lineNumber":598,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":599,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":600,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":601,"author":{"gitId":"Fallman2"},"content":"class TodoCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":602,"author":{"gitId":"Fallman2"},"content":" private final String desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":603,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":604,"author":{"gitId":"Fallman2"},"content":" TodoCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":605,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":606,"author":{"gitId":"Fallman2"},"content":" this.desc \u003d rest;","lastModifiedDate":"2023-08-30"},{"lineNumber":607,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":608,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":609,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":610,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":611,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":612,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":613,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":614,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":615,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":616,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":617,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":618,"author":{"gitId":"Fallman2"},"content":" tl.add(new ToDo(this.desc));","lastModifiedDate":"2023-08-30"},{"lineNumber":619,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.toDo(tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":620,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":621,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":622,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":623,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":624,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":625,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":626,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":627,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":628,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":629,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of EventCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":630,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":631,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":632,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":633,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":634,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":635,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":636,"author":{"gitId":"Fallman2"},"content":" return (other instanceof TodoCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":637,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":638,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":639,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":640,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":641,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":642,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":643,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-08-31"},{"lineNumber":644,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":645,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":646,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":647,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":648,"author":{"gitId":"Fallman2"},"content":" return new ToDo(this.desc).toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":649,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":650,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":651,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":652,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":653,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":654,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":655,"author":{"gitId":"Fallman2"},"content":"class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":656,"author":{"gitId":"Fallman2"},"content":" private final String[] rest;","lastModifiedDate":"2023-08-30"},{"lineNumber":657,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":658,"author":{"gitId":"Fallman2"},"content":" DeadlineCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":659,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":660,"author":{"gitId":"Fallman2"},"content":" this.rest \u003d rest.split(\" /\");","lastModifiedDate":"2023-08-30"},{"lineNumber":661,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":662,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":663,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":664,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":665,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":666,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":667,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":668,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":669,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":670,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":671,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":672,"author":{"gitId":"Fallman2"},"content":" tl.add(new Deadline(this.rest));","lastModifiedDate":"2023-08-30"},{"lineNumber":673,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.deadline(tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":674,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":675,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":676,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":677,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":678,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":679,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":680,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":681,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":682,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":683,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of EventCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":684,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":685,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":686,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":687,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":688,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":689,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":690,"author":{"gitId":"Fallman2"},"content":" return (other instanceof DeadlineCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":691,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":692,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":693,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":694,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":695,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":696,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":697,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-08-31"},{"lineNumber":698,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":699,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":700,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":701,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":702,"author":{"gitId":"Fallman2"},"content":" return new Deadline(this.rest).toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":703,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":704,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":705,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":706,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":707,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":708,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":709,"author":{"gitId":"Fallman2"},"content":"class EventCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":710,"author":{"gitId":"Fallman2"},"content":" private final String[] rest;","lastModifiedDate":"2023-08-30"},{"lineNumber":711,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":712,"author":{"gitId":"Fallman2"},"content":" EventCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":713,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":714,"author":{"gitId":"Fallman2"},"content":" this.rest \u003d rest.split(\" /\");","lastModifiedDate":"2023-08-30"},{"lineNumber":715,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":716,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":717,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":718,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":719,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":720,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":721,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":722,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":723,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":724,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":725,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":726,"author":{"gitId":"Fallman2"},"content":" tl.add(new Event(this.rest));","lastModifiedDate":"2023-08-30"},{"lineNumber":727,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.event(tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":728,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":729,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":730,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":731,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":732,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":733,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":734,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":735,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":736,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":737,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of EventCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":738,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":739,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":740,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":741,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":742,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":743,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":744,"author":{"gitId":"Fallman2"},"content":" return (other instanceof EventCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":745,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":746,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":747,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":748,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":749,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":750,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":751,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-08-31"},{"lineNumber":752,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":753,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":754,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":755,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":756,"author":{"gitId":"Fallman2"},"content":" return new Event(this.rest).toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":757,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":758,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":759,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":760,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":761,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":762,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":763,"author":{"gitId":"Fallman2"},"content":"class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":764,"author":{"gitId":"Fallman2"},"content":" private final int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":765,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":766,"author":{"gitId":"Fallman2"},"content":" DeleteCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":767,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":768,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-08-30"},{"lineNumber":769,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":770,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":771,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":772,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":773,"author":{"gitId":"Fallman2"},"content":" * If the command is invalid due to the index being out of bounds, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":774,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":775,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":776,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":777,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":778,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":779,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":780,"author":{"gitId":"Fallman2"},"content":" Task hold \u003d tl.delete(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":781,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.delete(hold, tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":782,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":783,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":784,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":785,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":786,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":787,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":788,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":789,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":790,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":791,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() as this one.","lastModifiedDate":"2023-08-31"},{"lineNumber":792,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":793,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":794,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":795,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":796,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":797,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":798,"author":{"gitId":"Fallman2"},"content":" return (other instanceof DeleteCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":799,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":800,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":801,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":802,"author":{"gitId":"Fallman2"},"content":" * Returns a string representing this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":803,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":804,"author":{"gitId":"Fallman2"},"content":" * @return a String","lastModifiedDate":"2023-08-31"},{"lineNumber":805,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":806,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":807,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":808,"author":{"gitId":"Fallman2"},"content":" return \"delete \" + this.index;","lastModifiedDate":"2023-08-31"},{"lineNumber":809,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":810,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":811,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":812,"author":{"gitId":"Fallman2"},"content":"class ClearCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":813,"author":{"gitId":"Fallman2"},"content":" ClearCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":814,"author":{"gitId":"Fallman2"},"content":" super(false, rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":815,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":816,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":817,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":818,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":819,"author":{"gitId":"Fallman2"},"content":" * If the command is invalid, an error message is printed instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":820,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":821,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":822,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":823,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":824,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":825,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-08-31"},{"lineNumber":826,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":827,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":828,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":829,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":830,"author":{"gitId":"Fallman2"},"content":" tl.clear();","lastModifiedDate":"2023-08-30"},{"lineNumber":831,"author":{"gitId":"Fallman2"},"content":" DataHandler.clearAll();","lastModifiedDate":"2023-08-30"},{"lineNumber":832,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.clear());","lastModifiedDate":"2023-08-30"},{"lineNumber":833,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":834,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":835,"author":{"gitId":"Fallman2"},"content":" tl.clear();","lastModifiedDate":"2023-08-30"},{"lineNumber":836,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.clear());","lastModifiedDate":"2023-08-30"},{"lineNumber":837,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":838,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":839,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":840,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":841,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":842,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":843,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ClearCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":844,"author":{"gitId":"Fallman2"},"content":" * Used in testing.","lastModifiedDate":"2023-08-31"},{"lineNumber":845,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":846,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":847,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":848,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":849,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":850,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":851,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ClearCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":852,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":853,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":854,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":855,"author":{"gitId":"Fallman2"},"content":"class ErrorCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":856,"author":{"gitId":"Fallman2"},"content":" ErrorCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":857,"author":{"gitId":"Fallman2"},"content":" super(false, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":858,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":859,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":860,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":861,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":862,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":863,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":864,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":865,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":866,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":867,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":868,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":869,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":870,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":871,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":872,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":873,"author":{"gitId":"Fallman2"},"content":" * Returns the boolean representing whether another Object is an instance of an ErrorCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":874,"author":{"gitId":"Fallman2"},"content":" * Used in testing.","lastModifiedDate":"2023-08-31"},{"lineNumber":875,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":876,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":877,"author":{"gitId":"Fallman2"},"content":" * @return boolean","lastModifiedDate":"2023-08-31"},{"lineNumber":878,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":879,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":880,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":881,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ErrorCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":882,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":883,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":884,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":885,"author":{"gitId":"Fallman2"},"content":"class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":886,"author":{"gitId":"Fallman2"},"content":" private final String key;","lastModifiedDate":"2023-08-31"},{"lineNumber":887,"author":{"gitId":"Fallman2"},"content":" FindCommand(String rest) {","lastModifiedDate":"2023-08-31"},{"lineNumber":888,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":889,"author":{"gitId":"Fallman2"},"content":" this.key \u003d rest;","lastModifiedDate":"2023-08-31"},{"lineNumber":890,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":891,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":892,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":893,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":894,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.find());","lastModifiedDate":"2023-08-31"},{"lineNumber":895,"author":{"gitId":"Fallman2"},"content":" System.out.println(tl.find(this.key));","lastModifiedDate":"2023-08-31"},{"lineNumber":896,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":897,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-31"},{"lineNumber":898,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":899,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":900,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":901,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":902,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":903,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":904,"author":{"gitId":"Fallman2"},"content":"class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":905,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":906,"author":{"gitId":"Fallman2"},"content":" * Parses the command string as input from the UI and returns its corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":907,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":908,"author":{"gitId":"Fallman2"},"content":" * @param command First token of input from the UI","lastModifiedDate":"2023-08-31"},{"lineNumber":909,"author":{"gitId":"Fallman2"},"content":" * @param line Remaining input from the UI on the same line","lastModifiedDate":"2023-08-31"},{"lineNumber":910,"author":{"gitId":"Fallman2"},"content":" * @return Corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":911,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an invalid command or line is parsed","lastModifiedDate":"2023-08-31"},{"lineNumber":912,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":913,"author":{"gitId":"Fallman2"},"content":" public static Command parse(String command, String line) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":914,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":915,"author":{"gitId":"Fallman2"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":916,"author":{"gitId":"Fallman2"},"content":" return new ExitCommand(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":917,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":918,"author":{"gitId":"Fallman2"},"content":" return new ListCommand(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":919,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":920,"author":{"gitId":"Fallman2"},"content":" return new MarkCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":921,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":922,"author":{"gitId":"Fallman2"},"content":" return new UnmarkCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":923,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":924,"author":{"gitId":"Fallman2"},"content":" return new TodoCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":925,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":926,"author":{"gitId":"Fallman2"},"content":" return new DeadlineCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":927,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":928,"author":{"gitId":"Fallman2"},"content":" return new EventCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":929,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":930,"author":{"gitId":"Fallman2"},"content":" return new DeleteCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":931,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"clearall\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":932,"author":{"gitId":"Fallman2"},"content":" return new ClearCommand(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":933,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":934,"author":{"gitId":"Fallman2"},"content":" return new FindCommand(line.substring(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":935,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":936,"author":{"gitId":"Fallman2"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":937,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":938,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":939,"author":{"gitId":"Fallman2"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":940,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":941,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":942,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":943,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":944,"author":{"gitId":"Fallman2"},"content":"class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":945,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":946,"author":{"gitId":"Fallman2"},"content":" public static String ERROR_MESSAGE \u003d \"Unfortunately, the circumstances preceding this has necessitated that I issue and apology for the input that I have received is unrecognised.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":947,"author":{"gitId":"Fallman2"},"content":" public static String SEPARATOR \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":948,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":949,"author":{"gitId":"Fallman2"},"content":" private final Scanner sc;","lastModifiedDate":"2023-08-31"},{"lineNumber":950,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":951,"author":{"gitId":"Fallman2"},"content":" Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":952,"author":{"gitId":"Fallman2"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":953,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":954,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":955,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":956,"author":{"gitId":"Fallman2"},"content":" * Returns the first token from a line of input.","lastModifiedDate":"2023-08-31"},{"lineNumber":957,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":958,"author":{"gitId":"Fallman2"},"content":" * @return Command string.","lastModifiedDate":"2023-08-31"},{"lineNumber":959,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":960,"author":{"gitId":"Fallman2"},"content":" public String command() {","lastModifiedDate":"2023-08-31"},{"lineNumber":961,"author":{"gitId":"Fallman2"},"content":" return sc.next();","lastModifiedDate":"2023-08-30"},{"lineNumber":962,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":963,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":964,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":965,"author":{"gitId":"Fallman2"},"content":" * Returns the remainder of the line of input after the command string has been removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":966,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":967,"author":{"gitId":"Fallman2"},"content":" * @return Remainder of line.","lastModifiedDate":"2023-08-31"},{"lineNumber":968,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":969,"author":{"gitId":"Fallman2"},"content":" public String input() {","lastModifiedDate":"2023-08-31"},{"lineNumber":970,"author":{"gitId":"Fallman2"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":971,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":972,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":973,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":974,"author":{"gitId":"Fallman2"},"content":" * Prints the separator line.","lastModifiedDate":"2023-08-31"},{"lineNumber":975,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":976,"author":{"gitId":"Fallman2"},"content":" public void line() {","lastModifiedDate":"2023-08-31"},{"lineNumber":977,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":978,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":979,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":980,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":981,"author":{"gitId":"Fallman2"},"content":" * Prints the welcome logo and message.","lastModifiedDate":"2023-08-31"},{"lineNumber":982,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":983,"author":{"gitId":"Fallman2"},"content":" void startup() {","lastModifiedDate":"2023-08-30"},{"lineNumber":984,"author":{"gitId":"Fallman2"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":985,"author":{"gitId":"Fallman2"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":986,"author":{"gitId":"Fallman2"},"content":" + \"| |_| | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":987,"author":{"gitId":"Fallman2"},"content":" + \"| ___/| |_| | | __/\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":988,"author":{"gitId":"Fallman2"},"content":" + \"| | \\\\__,_|_|\\\\_\\\\___|\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":989,"author":{"gitId":"Fallman2"},"content":" + \"|_|\";","lastModifiedDate":"2023-08-30"},{"lineNumber":990,"author":{"gitId":"Fallman2"},"content":" System.out.println(\"Salutations! I hereby would like to inform you that my identity is that of\\n\" + logo +","lastModifiedDate":"2023-08-30"},{"lineNumber":991,"author":{"gitId":"Fallman2"},"content":" \"\\nAn exceedingly verbose conversation simulation program.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":992,"author":{"gitId":"Fallman2"},"content":" System.out.println(SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":993,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":994,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":995,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":996,"author":{"gitId":"Fallman2"},"content":" * Returns the exit message.","lastModifiedDate":"2023-08-31"},{"lineNumber":997,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":998,"author":{"gitId":"Fallman2"},"content":" * @return The exit message.","lastModifiedDate":"2023-08-31"},{"lineNumber":999,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1000,"author":{"gitId":"Fallman2"},"content":" String exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":1001,"author":{"gitId":"Fallman2"},"content":" return \"It appears that the user has decided to close the program as indicated by the command of which this is the function being issued and therefore,\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1002,"author":{"gitId":"Fallman2"},"content":" \"I shall bid thee farewell and wish thee great fortune in your future endeavors.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1003,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1004,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1005,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1006,"author":{"gitId":"Fallman2"},"content":" * Returns the message for listing tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1007,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1008,"author":{"gitId":"Fallman2"},"content":" * @return The message for listing tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1009,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1010,"author":{"gitId":"Fallman2"},"content":" String list() {","lastModifiedDate":"2023-08-30"},{"lineNumber":1011,"author":{"gitId":"Fallman2"},"content":" return \"Here is the collection of items, previously designated to be known as Tasks, that you have inputted over a previous unspecified period of time\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1012,"author":{"gitId":"Fallman2"},"content":" \"that may or may not require urgent attention, but will nevertheless necessitate some level of action within an either\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1013,"author":{"gitId":"Fallman2"},"content":" \"indicated or not indicated time period.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1014,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1015,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1016,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1017,"author":{"gitId":"Fallman2"},"content":" * Returns the message for marking a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":1018,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1019,"author":{"gitId":"Fallman2"},"content":" * @param index Index of the task that has been marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":1020,"author":{"gitId":"Fallman2"},"content":" * @return The message indicating that the task has been done.","lastModifiedDate":"2023-08-31"},{"lineNumber":1021,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1022,"author":{"gitId":"Fallman2"},"content":" String mark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":1023,"author":{"gitId":"Fallman2"},"content":" return \"I have been made aware of your desire to indicate that the task numbered \" + index +","lastModifiedDate":"2023-08-30"},{"lineNumber":1024,"author":{"gitId":"Fallman2"},"content":" \" has been since been achieved as of the time at which you hve stipulated as so.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1025,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1026,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1027,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1028,"author":{"gitId":"Fallman2"},"content":" * Returns the message for unmarking a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":1029,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1030,"author":{"gitId":"Fallman2"},"content":" * @return The message indicating that that task has been unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":1031,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1032,"author":{"gitId":"Fallman2"},"content":" String unmark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":1033,"author":{"gitId":"Fallman2"},"content":" return \"Very well. I have acknowledged your request to unmark the task of specified index as having been completed and\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1034,"author":{"gitId":"Fallman2"},"content":" \"will now proceed to set said task of specified index to be considered as having not yet been completed.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1035,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1036,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1037,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1038,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new to do task has been added to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1039,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1040,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1041,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1042,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":1043,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1044,"author":{"gitId":"Fallman2"},"content":" String toDo(TaskList tl) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":1045,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require doing at a future time but with no such time being specified and inserted it into \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1046,"author":{"gitId":"Fallman2"},"content":" \"the overall collection of said tasks that require action.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1047,"author":{"gitId":"Fallman2"},"content":" \"Here is a display of the added deadline task: \" + tl.get(tl.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1048,"author":{"gitId":"Fallman2"},"content":" \"You now, in total, have \" + tl.size() + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1049,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1050,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1051,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1052,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new Deadline task has been added to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1053,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1054,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1055,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1056,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":1057,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1058,"author":{"gitId":"Fallman2"},"content":" String deadline(TaskList tl) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":1059,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require doing at a future time alongside the stipulated time that you have indicated and inserted it into \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1060,"author":{"gitId":"Fallman2"},"content":" \"the overall collection of these tasks that require action.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1061,"author":{"gitId":"Fallman2"},"content":" \"Here is a display of the added deadline task: \" + tl.get(tl.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1062,"author":{"gitId":"Fallman2"},"content":" \"You now, in total, have \" + tl.size() + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1063,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1064,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1065,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1066,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new Event task has been added to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1067,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1068,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1069,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1070,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":1071,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1072,"author":{"gitId":"Fallman2"},"content":" String event(TaskList tl) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":1073,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require participation for a set period of time alongside this stipulated duration that you have indicated and inserted it into \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1074,"author":{"gitId":"Fallman2"},"content":" \"the overall collection of these tasks that require action.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1075,"author":{"gitId":"Fallman2"},"content":" \"Here is a display of the added deadline task: \" + tl.get(tl.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1076,"author":{"gitId":"Fallman2"},"content":" \"You now, in total, have \" + tl.size() + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1077,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1078,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1079,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1080,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a Task has been removed from the list","lastModifiedDate":"2023-08-31"},{"lineNumber":1081,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1082,"author":{"gitId":"Fallman2"},"content":" * @param hold The task that was removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":1083,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1084,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1085,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1086,"author":{"gitId":"Fallman2"},"content":" String delete(Task hold, TaskList tl) {","lastModifiedDate":"2023-08-30"},{"lineNumber":1087,"author":{"gitId":"Fallman2"},"content":" return \"I have acknowledged your request to have the task allocated to the specific index at which you have mentioned removed from the collection of all\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1088,"author":{"gitId":"Fallman2"},"content":" \"such tasks, colloquially known as your To Do list.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1089,"author":{"gitId":"Fallman2"},"content":" \"The task in question that has been deleted is: \" + hold + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1090,"author":{"gitId":"Fallman2"},"content":" \"As of this current moment, there are a total of \" + tl.size() + \" occurrences of tasks in your list.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1091,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1092,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1093,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1094,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that all tasks have been cleared from the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1095,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1096,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1097,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1098,"author":{"gitId":"Fallman2"},"content":" String clear() {","lastModifiedDate":"2023-08-30"},{"lineNumber":1099,"author":{"gitId":"Fallman2"},"content":" return \"Well I certainly hope you had meant to do that because I am not going too ask for your confirmation. As per the aforementioned instructions, I shall now\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1100,"author":{"gitId":"Fallman2"},"content":" \"purge all of the tasks that you have previously recorded and designated as requiring attention.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1101,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1102,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":1103,"author":{"gitId":"Fallman2"},"content":" String find() {","lastModifiedDate":"2023-08-31"},{"lineNumber":1104,"author":{"gitId":"Fallman2"},"content":" return \"As per the instructions provided, I shall initiate a search into your list of items, of which we have previously declared to be known as tasks due too their relatively \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":1105,"author":{"gitId":"Fallman2"},"content":" \"urgent need of attention within a specified or unspecified frame of time, for those of which have an alphabetical similarity to the frame of reference that you have provided.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":1106,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":1107,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Fallman2":1105,"-":2}},{"path":"src/test/java/puke/PukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"public class PukeTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" public void ParserTests() throws PukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ExitCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ExitCommand(\"\"), Parser.parse(\"bye\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ListCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ListCommand(\"\"), Parser.parse(\"list\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing MarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" assertEquals(new MarkCommand(\"3\"), Parser.parse(\"mark\", \" 3\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing UnmarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" assertEquals(new UnmarkCommand(\"4\"), Parser.parse(\"unmark\", \" 4\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing TodoCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" assertEquals(new TodoCommand(\"borrow book\"), Parser.parse(\"todo\", \" borrow book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing DeadlineCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" assertEquals(new DeadlineCommand(\"return book /by 2019-12-01T10:00\"), Parser.parse(\"deadline\", \" return book /by 2019-12-01T10:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing EventCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" assertEquals(new EventCommand(\"project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00\"), Parser.parse(\"event\", \" project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing DeleteCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" assertEquals(new DeleteCommand(\"5\"), Parser.parse(\"delete\", \" 5\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ClearCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ClearCommand(\"\"), Parser.parse(\"clearall\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ErrorCommand 1","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" //assertEquals(new ErrorCommand(), Parser.parse(\"bye\", \"123\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ErrorCommand 2","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ErrorCommand(), Parser.parse(\"todo\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" public void UiMessageTests() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" //Testing of Ui Exit Message","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" assertEquals(\"It appears that the user has decided to close the program as indicated by the command of which this is the function being issued and therefore,\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" \"I shall bid thee farewell and wish thee great fortune in your future endeavors.\", new Ui().exit());","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Fallman2":41}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"deadline return book /by 2019-12-01T10:00","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"event project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"unmark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"Inv","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"list 2","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":"mark 24","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":"bye","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Fallman2":19}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" archiveBaseName \u003d \"puke\"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" mainClassName \u003d \"puke.Main\"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Fallman2":2,"-":41}},{"path":"src/main/java/puke/Puke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"public class Puke {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" public Puke() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" tasks \u003d new TaskList(DataHandler.loadDatabase());","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" new File(\"ListData.txt\").createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" ui.startup();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" String command \u003d ui.command();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" String input \u003d ui.input();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" ui.line();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" Command next;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":" next \u003d Parser.parse(command, input);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" next \u003d new ErrorCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" next.execute(tasks, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" isExit \u003d next.isExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Fallman2"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Fallman2"},"content":" new Puke().run();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"},{"lineNumber":47,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"Fallman2"},"content":"class Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"Fallman2"},"content":" protected String tag;","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"Fallman2"},"content":" protected boolean done;","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"Fallman2"},"content":" protected String description;","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"Fallman2"},"content":" protected Task(String tag, String description) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"Fallman2"},"content":" this.tag \u003d tag;","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"Fallman2"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"Fallman2"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"Fallman2"},"content":" if (tag.isEmpty() || description.isEmpty()) {","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-22"},{"lineNumber":58,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":59,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":60,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":61,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Fallman2"},"content":" * Marks a task as done","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Fallman2"},"content":" public void mark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"Fallman2"},"content":" this.done \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":67,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Fallman2"},"content":" * Marks a task as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Fallman2"},"content":" public void unmark() {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"Fallman2"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":75,"author":{"gitId":"Fallman2"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Fallman2"},"content":" return description;","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the task that can be stored and read later when the program is initiated again.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Fallman2"},"content":" int checked \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Fallman2"},"content":" if (this.done) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Fallman2"},"content":" checked \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Fallman2"},"content":" return String.format(\"%s/%d/%s\", this.tag, checked , this.description);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation to be displayed in the to do list.","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":99,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":100,"author":{"gitId":"Fallman2"},"content":" String status \u003d \"[ ]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"Fallman2"},"content":" if (done) {","lastModifiedDate":"2023-08-22"},{"lineNumber":102,"author":{"gitId":"Fallman2"},"content":" status \u003d \"[X]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":103,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":104,"author":{"gitId":"Fallman2"},"content":" return String.format(\"%s%s %s\", this.tag, status, this.description);","lastModifiedDate":"2023-08-22"},{"lineNumber":105,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":106,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":107,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":108,"author":{"gitId":"Fallman2"},"content":"class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":109,"author":{"gitId":"Fallman2"},"content":" private final static String tag \u003d \"[T]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":110,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":111,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"Fallman2"},"content":" * Creates a Task with no set deadline or time period.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"Fallman2"},"content":" * @param desc The description of the task","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Fallman2"},"content":" public ToDo(String desc) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":118,"author":{"gitId":"Fallman2"},"content":" super(tag, desc);","lastModifiedDate":"2023-08-22"},{"lineNumber":119,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":121,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":122,"author":{"gitId":"Fallman2"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":123,"author":{"gitId":"Fallman2"},"content":" private final static String tag \u003d \"[D]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":124,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime date;","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":126,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"Fallman2"},"content":" * Creates a Task with a set deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Fallman2"},"content":" * @param all All strings from the remainder of the input after being split","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"Fallman2"},"content":" public Deadline(String[] all) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":133,"author":{"gitId":"Fallman2"},"content":" super(tag, all[0]);","lastModifiedDate":"2023-08-22"},{"lineNumber":134,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Fallman2"},"content":" this.date \u003d LocalDateTime.parse(all[1].split(\"by \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Fallman2"},"content":" } catch (Exception DateTimeParseException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-22"},{"lineNumber":138,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":139,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":140,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":141,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"Fallman2"},"content":" * Creates a Deadline Task using input from the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"Fallman2"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"Fallman2"},"content":" * @param date The date of the deadline.","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"Fallman2"},"content":" * @return The Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is detected e.g. the file is corrupted.","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"Fallman2"},"content":" public static Deadline construct(String desc, String date) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"Fallman2"},"content":" String[] container \u003d new String[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Fallman2"},"content":" container[0] \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Fallman2"},"content":" container[1] \u003d \"by \" + date;","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"Fallman2"},"content":" return new Deadline(container);","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is stored in the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"Fallman2"},"content":" return super.write() + \"/\" + this.date;","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is used for Displaying in the to do list.","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"Fallman2"},"content":" * @return a String representation","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":172,"author":{"gitId":"Fallman2"},"content":" return super.toString() + \" (by: \" + this.date + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":173,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":174,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":175,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":176,"author":{"gitId":"Fallman2"},"content":"class Event extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":177,"author":{"gitId":"Fallman2"},"content":" private static final String tag \u003d \"[E]\";","lastModifiedDate":"2023-08-22"},{"lineNumber":178,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime from;","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"Fallman2"},"content":" private final LocalDateTime to;","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":181,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":182,"author":{"gitId":"Fallman2"},"content":" * Creates a task with a start and end time","lastModifiedDate":"2023-08-31"},{"lineNumber":183,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":184,"author":{"gitId":"Fallman2"},"content":" * @param all All Strings from the remainder of the input line after the command string.","lastModifiedDate":"2023-08-31"},{"lineNumber":185,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is used.","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"Fallman2"},"content":" public Event(String[] all) throws PukeException {","lastModifiedDate":"2023-08-22"},{"lineNumber":188,"author":{"gitId":"Fallman2"},"content":" super(tag, all[0]);","lastModifiedDate":"2023-08-22"},{"lineNumber":189,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"Fallman2"},"content":" this.from \u003d LocalDateTime.parse(all[1].split(\"from \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"Fallman2"},"content":" this.to \u003d LocalDateTime.parse(all[2].split(\"to \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"Fallman2"},"content":" } catch (Exception DateTimeParseException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"Fallman2"},"content":" System.out.println(all[1].split(\"from \")[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-22"},{"lineNumber":195,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":196,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":197,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":198,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":199,"author":{"gitId":"Fallman2"},"content":" * Creates an Event task using data stored in the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":200,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":201,"author":{"gitId":"Fallman2"},"content":" * @param desc Description of the event","lastModifiedDate":"2023-08-31"},{"lineNumber":202,"author":{"gitId":"Fallman2"},"content":" * @param from Start date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":203,"author":{"gitId":"Fallman2"},"content":" * @param to Ending date and time of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"Fallman2"},"content":" * @return The Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an incorrect format is detected e.g. the file is corrupted.","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"Fallman2"},"content":" public static Event construct(String desc, String from, String to) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"Fallman2"},"content":" String[] container \u003d new String[3];","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"Fallman2"},"content":" container[0] \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"Fallman2"},"content":" container[1] \u003d \"from \" + from;","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"Fallman2"},"content":" container[2] \u003d \"to \" + to;","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"Fallman2"},"content":" return new Event(container);","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is stored in the ListData.txt file.","lastModifiedDate":"2023-08-31"},{"lineNumber":217,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"Fallman2"},"content":" public String write() {","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"Fallman2"},"content":" return super.write() + \"/\" + this.from + \"/\" + this.to;","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the Deadline task that is used for Displaying in the to do list.","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"Fallman2"},"content":" * @return a String representation.","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":231,"author":{"gitId":"Fallman2"},"content":" return super.toString() + \" (from: \" + this.from + \" \" +","lastModifiedDate":"2023-08-22"},{"lineNumber":232,"author":{"gitId":"Fallman2"},"content":" \"to: \" + this.to + \")\";","lastModifiedDate":"2023-08-22"},{"lineNumber":233,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":234,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":235,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":236,"author":{"gitId":"Fallman2"},"content":"class PukeException extends Exception {","lastModifiedDate":"2023-08-22"},{"lineNumber":237,"author":{"gitId":"Fallman2"},"content":" public PukeException() {","lastModifiedDate":"2023-08-22"},{"lineNumber":238,"author":{"gitId":"Fallman2"},"content":" super(\"Unfortunately, the circumstances preceding this has necessitated that I issue and apology for the input that I have received is unrecognised.\");","lastModifiedDate":"2023-08-22"},{"lineNumber":239,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":240,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-22"},{"lineNumber":241,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"Fallman2"},"content":"class DataHandler {","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"Fallman2"},"content":" * Interprets a line from the ListData.txt file used to store events.","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"Fallman2"},"content":" * @param input a line from the file","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"Fallman2"},"content":" * @return a corresponding task.","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an invalid task is detected.","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"Fallman2"},"content":" public static Task translate(String input) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"Fallman2"},"content":" String[] split \u003d input.split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"Fallman2"},"content":" Task output;","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"Fallman2"},"content":" if (split[0].equals(\"[T]\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"Fallman2"},"content":" output \u003d new ToDo(split[2]);","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"Fallman2"},"content":" } else if (split[0].equals(\"[D]\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"Fallman2"},"content":" output \u003d Deadline.construct(split[2], split[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"Fallman2"},"content":" } else if (split[0].equals(\"[E]\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"Fallman2"},"content":" output \u003d Event.construct(split[2], split[3], split[4]);","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"Fallman2"},"content":" if (split[1].equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"Fallman2"},"content":" output.unmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"Fallman2"},"content":" } else if (split[1].equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"Fallman2"},"content":" output.mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"Fallman2"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":276,"author":{"gitId":"Fallman2"},"content":" * Updates the ListData.txt file with the latest list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":277,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":278,"author":{"gitId":"Fallman2"},"content":" * @param taskList The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":279,"author":{"gitId":"Fallman2"},"content":" * @throws IOException If an error occurs with the file writer.","lastModifiedDate":"2023-08-31"},{"lineNumber":280,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"Fallman2"},"content":" public static void writeToDatabase(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"Fallman2"},"content":" FileWriter fw \u003d new FileWriter(\"ListData.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"Fallman2"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"Fallman2"},"content":" for (Task item:taskList.getList()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"Fallman2"},"content":" output.append(item.write()).append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"Fallman2"},"content":" fw.write(output.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"Fallman2"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":292,"author":{"gitId":"Fallman2"},"content":" * Loads the events stored in the ListData.txt file when the program is run.","lastModifiedDate":"2023-08-31"},{"lineNumber":293,"author":{"gitId":"Fallman2"},"content":" * If an invalid line is detected, it is skipped.","lastModifiedDate":"2023-08-31"},{"lineNumber":294,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":295,"author":{"gitId":"Fallman2"},"content":" * @return The Task List","lastModifiedDate":"2023-08-31"},{"lineNumber":296,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the file is not found.","lastModifiedDate":"2023-08-31"},{"lineNumber":297,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":298,"author":{"gitId":"Fallman2"},"content":" public static ArrayList\u003cTask\u003e loadDatabase() throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":299,"author":{"gitId":"Fallman2"},"content":" Scanner sc;","lastModifiedDate":"2023-08-30"},{"lineNumber":300,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":301,"author":{"gitId":"Fallman2"},"content":" sc \u003d new Scanner(new File(\"ListData.txt\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":302,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":303,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":304,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":305,"author":{"gitId":"Fallman2"},"content":" ArrayList\u003cTask\u003e output \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":306,"author":{"gitId":"Fallman2"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"Fallman2"},"content":" output.add(DataHandler.translate(sc.nextLine()));","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"Fallman2"},"content":" continue;","lastModifiedDate":"2023-08-30"},{"lineNumber":311,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"Fallman2"},"content":" return output;","lastModifiedDate":"2023-08-30"},{"lineNumber":314,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":315,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":316,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":317,"author":{"gitId":"Fallman2"},"content":" * Clears all stored tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":318,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":319,"author":{"gitId":"Fallman2"},"content":" * @throws IOException If an error occurs with the FileWriter.","lastModifiedDate":"2023-08-31"},{"lineNumber":320,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":321,"author":{"gitId":"Fallman2"},"content":" public static void clearAll() throws IOException {","lastModifiedDate":"2023-08-30"},{"lineNumber":322,"author":{"gitId":"Fallman2"},"content":" FileWriter fw \u003d new FileWriter(\"ListData.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":323,"author":{"gitId":"Fallman2"},"content":" fw.write(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":324,"author":{"gitId":"Fallman2"},"content":" fw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":325,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":326,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":327,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":328,"author":{"gitId":"Fallman2"},"content":"class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":329,"author":{"gitId":"Fallman2"},"content":" private final ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-31"},{"lineNumber":330,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":331,"author":{"gitId":"Fallman2"},"content":" TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":332,"author":{"gitId":"Fallman2"},"content":" this.list \u003d new ArrayList\u003cTask\u003e(100);","lastModifiedDate":"2023-08-30"},{"lineNumber":333,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":334,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":335,"author":{"gitId":"Fallman2"},"content":" TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":336,"author":{"gitId":"Fallman2"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":337,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":338,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":339,"author":{"gitId":"Fallman2"},"content":" String printOut() {","lastModifiedDate":"2023-08-30"},{"lineNumber":340,"author":{"gitId":"Fallman2"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":341,"author":{"gitId":"Fallman2"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":342,"author":{"gitId":"Fallman2"},"content":" for (Task s : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":343,"author":{"gitId":"Fallman2"},"content":" sb.append(String.format(\"%d. %s\\n\", i, s.toString()));","lastModifiedDate":"2023-08-30"},{"lineNumber":344,"author":{"gitId":"Fallman2"},"content":" i++;","lastModifiedDate":"2023-08-30"},{"lineNumber":345,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":346,"author":{"gitId":"Fallman2"},"content":" return sb.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":347,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":348,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":349,"author":{"gitId":"Fallman2"},"content":" Task get(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":350,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":351,"author":{"gitId":"Fallman2"},"content":" return list.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":352,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":353,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":354,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":355,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":356,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":357,"author":{"gitId":"Fallman2"},"content":" ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":358,"author":{"gitId":"Fallman2"},"content":" return this.list;","lastModifiedDate":"2023-08-30"},{"lineNumber":359,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":360,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":361,"author":{"gitId":"Fallman2"},"content":" void add(Task t) {","lastModifiedDate":"2023-08-30"},{"lineNumber":362,"author":{"gitId":"Fallman2"},"content":" this.list.add(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":363,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":364,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":365,"author":{"gitId":"Fallman2"},"content":" Task delete(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":366,"author":{"gitId":"Fallman2"},"content":" Task hold;","lastModifiedDate":"2023-08-30"},{"lineNumber":367,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":368,"author":{"gitId":"Fallman2"},"content":" hold \u003d list.get(index - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":369,"author":{"gitId":"Fallman2"},"content":" list.remove(index - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":370,"author":{"gitId":"Fallman2"},"content":" return hold;","lastModifiedDate":"2023-08-30"},{"lineNumber":371,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":372,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":373,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":374,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":375,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":376,"author":{"gitId":"Fallman2"},"content":" String find(String key) {","lastModifiedDate":"2023-08-31"},{"lineNumber":377,"author":{"gitId":"Fallman2"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":378,"author":{"gitId":"Fallman2"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-31"},{"lineNumber":379,"author":{"gitId":"Fallman2"},"content":" for (Task s : list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":380,"author":{"gitId":"Fallman2"},"content":" if (s.getDescription().contains(key)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":381,"author":{"gitId":"Fallman2"},"content":" sb.append(String.format(\"%d. %s\\n\", i, s.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":382,"author":{"gitId":"Fallman2"},"content":" i++;","lastModifiedDate":"2023-08-31"},{"lineNumber":383,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":384,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":385,"author":{"gitId":"Fallman2"},"content":" return sb.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":386,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":387,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":388,"author":{"gitId":"Fallman2"},"content":" void mark(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":389,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":390,"author":{"gitId":"Fallman2"},"content":" list.get(index - 1).mark();","lastModifiedDate":"2023-08-30"},{"lineNumber":391,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":392,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":393,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":394,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":395,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":396,"author":{"gitId":"Fallman2"},"content":" void unmark(int index) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":397,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":398,"author":{"gitId":"Fallman2"},"content":" list.get(index - 1).unmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":399,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":400,"author":{"gitId":"Fallman2"},"content":" throw new PukeException();","lastModifiedDate":"2023-08-30"},{"lineNumber":401,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":402,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":403,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":404,"author":{"gitId":"Fallman2"},"content":" int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":405,"author":{"gitId":"Fallman2"},"content":" return list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":406,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":407,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":408,"author":{"gitId":"Fallman2"},"content":" void clear() {","lastModifiedDate":"2023-08-30"},{"lineNumber":409,"author":{"gitId":"Fallman2"},"content":" this.list.clear();","lastModifiedDate":"2023-08-30"},{"lineNumber":410,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":411,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":412,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":413,"author":{"gitId":"Fallman2"},"content":"abstract class Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":414,"author":{"gitId":"Fallman2"},"content":" private final boolean exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":415,"author":{"gitId":"Fallman2"},"content":" protected boolean isValid;","lastModifiedDate":"2023-08-31"},{"lineNumber":416,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":417,"author":{"gitId":"Fallman2"},"content":" Command(boolean exit, boolean valid) {","lastModifiedDate":"2023-08-30"},{"lineNumber":418,"author":{"gitId":"Fallman2"},"content":" this.exit \u003d exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":419,"author":{"gitId":"Fallman2"},"content":" this.isValid \u003d valid;","lastModifiedDate":"2023-08-31"},{"lineNumber":420,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":421,"author":{"gitId":"Fallman2"},"content":" abstract void execute(TaskList tl, Ui ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":422,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":423,"author":{"gitId":"Fallman2"},"content":" boolean isExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":424,"author":{"gitId":"Fallman2"},"content":" return this.exit;","lastModifiedDate":"2023-08-30"},{"lineNumber":425,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":426,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":427,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":428,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":429,"author":{"gitId":"Fallman2"},"content":"class ExitCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":430,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":431,"author":{"gitId":"Fallman2"},"content":" ExitCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":432,"author":{"gitId":"Fallman2"},"content":" super(rest.isEmpty(), rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":433,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":434,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":435,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":436,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":437,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":438,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":439,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":440,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":441,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":442,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":443,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-08-31"},{"lineNumber":444,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":445,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":446,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":447,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.exit());","lastModifiedDate":"2023-08-30"},{"lineNumber":448,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":449,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":450,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":451,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":452,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ExitCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":453,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":454,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":455,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":456,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":457,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":458,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":459,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ExitCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":460,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":461,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":462,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":463,"author":{"gitId":"Fallman2"},"content":"class ListCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":464,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":465,"author":{"gitId":"Fallman2"},"content":" ListCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":466,"author":{"gitId":"Fallman2"},"content":" super(false, rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":467,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":468,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":469,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":470,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":471,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format.","lastModifiedDate":"2023-08-31"},{"lineNumber":472,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":473,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":474,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":475,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":476,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":477,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-08-31"},{"lineNumber":478,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":479,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":480,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":481,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.list());","lastModifiedDate":"2023-08-30"},{"lineNumber":482,"author":{"gitId":"Fallman2"},"content":" System.out.println(tl.printOut());","lastModifiedDate":"2023-08-30"},{"lineNumber":483,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":484,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":485,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":486,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":487,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":488,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ListCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":489,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":490,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-08-31"},{"lineNumber":491,"author":{"gitId":"Fallman2"},"content":" * @return a boolean","lastModifiedDate":"2023-08-31"},{"lineNumber":492,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":493,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":494,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":495,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":496,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":497,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":498,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":499,"author":{"gitId":"Fallman2"},"content":"class MarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":500,"author":{"gitId":"Fallman2"},"content":" private final int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":501,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":502,"author":{"gitId":"Fallman2"},"content":" MarkCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":503,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":504,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-08-30"},{"lineNumber":505,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":506,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":507,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":508,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":509,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format or an index is out of bounds, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":510,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":511,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":512,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":513,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":514,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":515,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":516,"author":{"gitId":"Fallman2"},"content":" tl.mark(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":517,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.mark(this.index));","lastModifiedDate":"2023-08-30"},{"lineNumber":518,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":519,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":520,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":521,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":522,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":523,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":524,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":525,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":526,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":527,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() and is an instance of MarkCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":528,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":529,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-08-31"},{"lineNumber":530,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":531,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":532,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":533,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":534,"author":{"gitId":"Fallman2"},"content":" return (other instanceof MarkCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":535,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":536,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":537,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":538,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the command","lastModifiedDate":"2023-08-31"},{"lineNumber":539,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":540,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":541,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":542,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":543,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":544,"author":{"gitId":"Fallman2"},"content":" return \"mark \" + this.index;","lastModifiedDate":"2023-08-31"},{"lineNumber":545,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":546,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":547,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":548,"author":{"gitId":"Fallman2"},"content":"class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":549,"author":{"gitId":"Fallman2"},"content":" private int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":550,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":551,"author":{"gitId":"Fallman2"},"content":" UnmarkCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":552,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":553,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":554,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":555,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":556,"author":{"gitId":"Fallman2"},"content":" this.index \u003d -1;","lastModifiedDate":"2023-08-30"},{"lineNumber":557,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":558,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":559,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":560,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":561,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":562,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format or an index is out of bounds, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":563,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":564,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":565,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":566,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":567,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":568,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":569,"author":{"gitId":"Fallman2"},"content":" tl.unmark(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":570,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.unmark());","lastModifiedDate":"2023-08-31"},{"lineNumber":571,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":572,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":573,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":574,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":575,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":576,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":577,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":578,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":579,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":580,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() and is an instance of UnmarkCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":581,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":582,"author":{"gitId":"Fallman2"},"content":" * @param other Another object","lastModifiedDate":"2023-08-31"},{"lineNumber":583,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":584,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":585,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":586,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":587,"author":{"gitId":"Fallman2"},"content":" return (other instanceof UnmarkCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":588,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":589,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":590,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":591,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of the command","lastModifiedDate":"2023-08-31"},{"lineNumber":592,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":593,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":594,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":595,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":596,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":597,"author":{"gitId":"Fallman2"},"content":" return \"unmark \" + this.index;","lastModifiedDate":"2023-08-31"},{"lineNumber":598,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":599,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":600,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":601,"author":{"gitId":"Fallman2"},"content":"class TodoCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":602,"author":{"gitId":"Fallman2"},"content":" private final String desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":603,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":604,"author":{"gitId":"Fallman2"},"content":" TodoCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":605,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":606,"author":{"gitId":"Fallman2"},"content":" this.desc \u003d rest;","lastModifiedDate":"2023-08-30"},{"lineNumber":607,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":608,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":609,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":610,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":611,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":612,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":613,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":614,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":615,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":616,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":617,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":618,"author":{"gitId":"Fallman2"},"content":" tl.add(new ToDo(this.desc));","lastModifiedDate":"2023-08-30"},{"lineNumber":619,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.toDo(tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":620,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":621,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":622,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":623,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":624,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":625,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":626,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":627,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":628,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":629,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of EventCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":630,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":631,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":632,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":633,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":634,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":635,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":636,"author":{"gitId":"Fallman2"},"content":" return (other instanceof TodoCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":637,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":638,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":639,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":640,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":641,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":642,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":643,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-08-31"},{"lineNumber":644,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":645,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":646,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":647,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":648,"author":{"gitId":"Fallman2"},"content":" return new ToDo(this.desc).toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":649,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":650,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":651,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":652,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":653,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":654,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":655,"author":{"gitId":"Fallman2"},"content":"class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":656,"author":{"gitId":"Fallman2"},"content":" private final String[] rest;","lastModifiedDate":"2023-08-30"},{"lineNumber":657,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":658,"author":{"gitId":"Fallman2"},"content":" DeadlineCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":659,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":660,"author":{"gitId":"Fallman2"},"content":" this.rest \u003d rest.split(\" /\");","lastModifiedDate":"2023-08-30"},{"lineNumber":661,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":662,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":663,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":664,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":665,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":666,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":667,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":668,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":669,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":670,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":671,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":672,"author":{"gitId":"Fallman2"},"content":" tl.add(new Deadline(this.rest));","lastModifiedDate":"2023-08-30"},{"lineNumber":673,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.deadline(tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":674,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":675,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":676,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":677,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":678,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":679,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":680,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":681,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":682,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":683,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of EventCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":684,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":685,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":686,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":687,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":688,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":689,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":690,"author":{"gitId":"Fallman2"},"content":" return (other instanceof DeadlineCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":691,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":692,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":693,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":694,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":695,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":696,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":697,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-08-31"},{"lineNumber":698,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":699,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":700,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":701,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":702,"author":{"gitId":"Fallman2"},"content":" return new Deadline(this.rest).toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":703,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":704,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":705,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":706,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":707,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":708,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":709,"author":{"gitId":"Fallman2"},"content":"class EventCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":710,"author":{"gitId":"Fallman2"},"content":" private final String[] rest;","lastModifiedDate":"2023-08-30"},{"lineNumber":711,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":712,"author":{"gitId":"Fallman2"},"content":" EventCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":713,"author":{"gitId":"Fallman2"},"content":" super(false, !rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":714,"author":{"gitId":"Fallman2"},"content":" this.rest \u003d rest.split(\" /\");","lastModifiedDate":"2023-08-30"},{"lineNumber":715,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":716,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":717,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":718,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":719,"author":{"gitId":"Fallman2"},"content":" * If the command is in the wrong format, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":720,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":721,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":722,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":723,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":724,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":725,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":726,"author":{"gitId":"Fallman2"},"content":" tl.add(new Event(this.rest));","lastModifiedDate":"2023-08-30"},{"lineNumber":727,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.event(tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":728,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":729,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":730,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":731,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":732,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":733,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":734,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":735,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":736,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":737,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString as this command and is an instance of EventCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":738,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":739,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":740,"author":{"gitId":"Fallman2"},"content":" * @return A boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":741,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":742,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":743,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":744,"author":{"gitId":"Fallman2"},"content":" return (other instanceof EventCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":745,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":746,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":747,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":748,"author":{"gitId":"Fallman2"},"content":" * Returns a String representation of this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":749,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":750,"author":{"gitId":"Fallman2"},"content":" * @return a String.","lastModifiedDate":"2023-08-31"},{"lineNumber":751,"author":{"gitId":"Fallman2"},"content":" * @throws RuntimeException If an incorrect format is used","lastModifiedDate":"2023-08-31"},{"lineNumber":752,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":753,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":754,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":755,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":756,"author":{"gitId":"Fallman2"},"content":" return new Event(this.rest).toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":757,"author":{"gitId":"Fallman2"},"content":" } catch (PukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":758,"author":{"gitId":"Fallman2"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-31"},{"lineNumber":759,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":760,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":761,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":762,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":763,"author":{"gitId":"Fallman2"},"content":"class DeleteCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":764,"author":{"gitId":"Fallman2"},"content":" private final int index;","lastModifiedDate":"2023-08-30"},{"lineNumber":765,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":766,"author":{"gitId":"Fallman2"},"content":" DeleteCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":767,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-30"},{"lineNumber":768,"author":{"gitId":"Fallman2"},"content":" this.index \u003d Integer.parseInt(rest);","lastModifiedDate":"2023-08-30"},{"lineNumber":769,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":770,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":771,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":772,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":773,"author":{"gitId":"Fallman2"},"content":" * If the command is invalid due to the index being out of bounds, prints an error message instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":774,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":775,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":776,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":777,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":778,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":779,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":780,"author":{"gitId":"Fallman2"},"content":" Task hold \u003d tl.delete(this.index);","lastModifiedDate":"2023-08-30"},{"lineNumber":781,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.delete(hold, tl));","lastModifiedDate":"2023-08-30"},{"lineNumber":782,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":783,"author":{"gitId":"Fallman2"},"content":" DataHandler.writeToDatabase(tl);","lastModifiedDate":"2023-08-30"},{"lineNumber":784,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-30"},{"lineNumber":785,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":786,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":787,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":788,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":789,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":790,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":791,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object has the same toString() as this one.","lastModifiedDate":"2023-08-31"},{"lineNumber":792,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":793,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":794,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":795,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":796,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":797,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":798,"author":{"gitId":"Fallman2"},"content":" return (other instanceof DeleteCommand \u0026\u0026 other.toString().equals(this.toString()));","lastModifiedDate":"2023-08-31"},{"lineNumber":799,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":800,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":801,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":802,"author":{"gitId":"Fallman2"},"content":" * Returns a string representing this command.","lastModifiedDate":"2023-08-31"},{"lineNumber":803,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":804,"author":{"gitId":"Fallman2"},"content":" * @return a String","lastModifiedDate":"2023-08-31"},{"lineNumber":805,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":806,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":807,"author":{"gitId":"Fallman2"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":808,"author":{"gitId":"Fallman2"},"content":" return \"delete \" + this.index;","lastModifiedDate":"2023-08-31"},{"lineNumber":809,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":810,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":811,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":812,"author":{"gitId":"Fallman2"},"content":"class ClearCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":813,"author":{"gitId":"Fallman2"},"content":" ClearCommand(String rest) {","lastModifiedDate":"2023-08-30"},{"lineNumber":814,"author":{"gitId":"Fallman2"},"content":" super(false, rest.isEmpty());","lastModifiedDate":"2023-08-30"},{"lineNumber":815,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":816,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":817,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":818,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":819,"author":{"gitId":"Fallman2"},"content":" * If the command is invalid, an error message is printed instead.","lastModifiedDate":"2023-08-31"},{"lineNumber":820,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":821,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":822,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":823,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":824,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":825,"author":{"gitId":"Fallman2"},"content":" if (!super.isValid) {","lastModifiedDate":"2023-08-31"},{"lineNumber":826,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":827,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":828,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":829,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":830,"author":{"gitId":"Fallman2"},"content":" tl.clear();","lastModifiedDate":"2023-08-30"},{"lineNumber":831,"author":{"gitId":"Fallman2"},"content":" DataHandler.clearAll();","lastModifiedDate":"2023-08-30"},{"lineNumber":832,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.clear());","lastModifiedDate":"2023-08-30"},{"lineNumber":833,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":834,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":835,"author":{"gitId":"Fallman2"},"content":" tl.clear();","lastModifiedDate":"2023-08-30"},{"lineNumber":836,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.clear());","lastModifiedDate":"2023-08-30"},{"lineNumber":837,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":838,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":839,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":840,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":841,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":842,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":843,"author":{"gitId":"Fallman2"},"content":" * Returns a boolean indicating if the other object is an instance of ClearCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":844,"author":{"gitId":"Fallman2"},"content":" * Used in testing.","lastModifiedDate":"2023-08-31"},{"lineNumber":845,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":846,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":847,"author":{"gitId":"Fallman2"},"content":" * @return a boolean.","lastModifiedDate":"2023-08-31"},{"lineNumber":848,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":849,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":850,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":851,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ClearCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":852,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":853,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":854,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":855,"author":{"gitId":"Fallman2"},"content":"class ErrorCommand extends Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":856,"author":{"gitId":"Fallman2"},"content":" ErrorCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":857,"author":{"gitId":"Fallman2"},"content":" super(false, false);","lastModifiedDate":"2023-08-30"},{"lineNumber":858,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":859,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":860,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":861,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":862,"author":{"gitId":"Fallman2"},"content":" * Executes the command by printing out the corresponding message.","lastModifiedDate":"2023-08-31"},{"lineNumber":863,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":864,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":865,"author":{"gitId":"Fallman2"},"content":" * @param ui The UI.","lastModifiedDate":"2023-08-31"},{"lineNumber":866,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":867,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-30"},{"lineNumber":868,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":869,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":870,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":871,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":872,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":873,"author":{"gitId":"Fallman2"},"content":" * Returns the boolean representing whether another Object is an instance of an ErrorCommand.","lastModifiedDate":"2023-08-31"},{"lineNumber":874,"author":{"gitId":"Fallman2"},"content":" * Used in testing.","lastModifiedDate":"2023-08-31"},{"lineNumber":875,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":876,"author":{"gitId":"Fallman2"},"content":" * @param other Another object.","lastModifiedDate":"2023-08-31"},{"lineNumber":877,"author":{"gitId":"Fallman2"},"content":" * @return boolean","lastModifiedDate":"2023-08-31"},{"lineNumber":878,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":879,"author":{"gitId":"Fallman2"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":880,"author":{"gitId":"Fallman2"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-08-31"},{"lineNumber":881,"author":{"gitId":"Fallman2"},"content":" return (other instanceof ErrorCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":882,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":883,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":884,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":885,"author":{"gitId":"Fallman2"},"content":"class FindCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":886,"author":{"gitId":"Fallman2"},"content":" private final String key;","lastModifiedDate":"2023-08-31"},{"lineNumber":887,"author":{"gitId":"Fallman2"},"content":" FindCommand(String rest) {","lastModifiedDate":"2023-08-31"},{"lineNumber":888,"author":{"gitId":"Fallman2"},"content":" super(false, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":889,"author":{"gitId":"Fallman2"},"content":" this.key \u003d rest;","lastModifiedDate":"2023-08-31"},{"lineNumber":890,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":891,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":892,"author":{"gitId":"Fallman2"},"content":" void execute(TaskList tl, Ui ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":893,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":894,"author":{"gitId":"Fallman2"},"content":" System.out.println(ui.find());","lastModifiedDate":"2023-08-31"},{"lineNumber":895,"author":{"gitId":"Fallman2"},"content":" System.out.println(tl.find(this.key));","lastModifiedDate":"2023-08-31"},{"lineNumber":896,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":897,"author":{"gitId":"Fallman2"},"content":" } catch (Exception PukeException) {","lastModifiedDate":"2023-08-31"},{"lineNumber":898,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.ERROR_MESSAGE);","lastModifiedDate":"2023-08-31"},{"lineNumber":899,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":900,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":901,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":902,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":903,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":904,"author":{"gitId":"Fallman2"},"content":"class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":905,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":906,"author":{"gitId":"Fallman2"},"content":" * Parses the command string as input from the UI and returns its corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":907,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":908,"author":{"gitId":"Fallman2"},"content":" * @param command First token of input from the UI","lastModifiedDate":"2023-08-31"},{"lineNumber":909,"author":{"gitId":"Fallman2"},"content":" * @param line Remaining input from the UI on the same line","lastModifiedDate":"2023-08-31"},{"lineNumber":910,"author":{"gitId":"Fallman2"},"content":" * @return Corresponding command","lastModifiedDate":"2023-08-31"},{"lineNumber":911,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If an invalid command or line is parsed","lastModifiedDate":"2023-08-31"},{"lineNumber":912,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":913,"author":{"gitId":"Fallman2"},"content":" public static Command parse(String command, String line) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":914,"author":{"gitId":"Fallman2"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":915,"author":{"gitId":"Fallman2"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":916,"author":{"gitId":"Fallman2"},"content":" return new ExitCommand(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":917,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":918,"author":{"gitId":"Fallman2"},"content":" return new ListCommand(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":919,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":920,"author":{"gitId":"Fallman2"},"content":" return new MarkCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":921,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":922,"author":{"gitId":"Fallman2"},"content":" return new UnmarkCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":923,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":924,"author":{"gitId":"Fallman2"},"content":" return new TodoCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":925,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":926,"author":{"gitId":"Fallman2"},"content":" return new DeadlineCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":927,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":928,"author":{"gitId":"Fallman2"},"content":" return new EventCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":929,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":930,"author":{"gitId":"Fallman2"},"content":" return new DeleteCommand(line.substring(1));","lastModifiedDate":"2023-08-30"},{"lineNumber":931,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"clearall\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":932,"author":{"gitId":"Fallman2"},"content":" return new ClearCommand(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":933,"author":{"gitId":"Fallman2"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":934,"author":{"gitId":"Fallman2"},"content":" return new FindCommand(line.substring(1));","lastModifiedDate":"2023-08-31"},{"lineNumber":935,"author":{"gitId":"Fallman2"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":936,"author":{"gitId":"Fallman2"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":937,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":938,"author":{"gitId":"Fallman2"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":939,"author":{"gitId":"Fallman2"},"content":" return new ErrorCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":940,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":941,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":942,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":943,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":944,"author":{"gitId":"Fallman2"},"content":"class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":945,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":946,"author":{"gitId":"Fallman2"},"content":" public static String ERROR_MESSAGE \u003d \"Unfortunately, the circumstances preceding this has necessitated that I issue and apology for the input that I have received is unrecognised.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":947,"author":{"gitId":"Fallman2"},"content":" public static String SEPARATOR \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":948,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":949,"author":{"gitId":"Fallman2"},"content":" private final Scanner sc;","lastModifiedDate":"2023-08-31"},{"lineNumber":950,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":951,"author":{"gitId":"Fallman2"},"content":" Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":952,"author":{"gitId":"Fallman2"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":953,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":954,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":955,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":956,"author":{"gitId":"Fallman2"},"content":" * Returns the first token from a line of input.","lastModifiedDate":"2023-08-31"},{"lineNumber":957,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":958,"author":{"gitId":"Fallman2"},"content":" * @return Command string.","lastModifiedDate":"2023-08-31"},{"lineNumber":959,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":960,"author":{"gitId":"Fallman2"},"content":" public String command() {","lastModifiedDate":"2023-08-31"},{"lineNumber":961,"author":{"gitId":"Fallman2"},"content":" return sc.next();","lastModifiedDate":"2023-08-30"},{"lineNumber":962,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":963,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":964,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":965,"author":{"gitId":"Fallman2"},"content":" * Returns the remainder of the line of input after the command string has been removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":966,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":967,"author":{"gitId":"Fallman2"},"content":" * @return Remainder of line.","lastModifiedDate":"2023-08-31"},{"lineNumber":968,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":969,"author":{"gitId":"Fallman2"},"content":" public String input() {","lastModifiedDate":"2023-08-31"},{"lineNumber":970,"author":{"gitId":"Fallman2"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":971,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":972,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":973,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":974,"author":{"gitId":"Fallman2"},"content":" * Prints the separator line.","lastModifiedDate":"2023-08-31"},{"lineNumber":975,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":976,"author":{"gitId":"Fallman2"},"content":" public void line() {","lastModifiedDate":"2023-08-31"},{"lineNumber":977,"author":{"gitId":"Fallman2"},"content":" System.out.println(Ui.SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":978,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":979,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":980,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":981,"author":{"gitId":"Fallman2"},"content":" * Prints the welcome logo and message.","lastModifiedDate":"2023-08-31"},{"lineNumber":982,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":983,"author":{"gitId":"Fallman2"},"content":" void startup() {","lastModifiedDate":"2023-08-30"},{"lineNumber":984,"author":{"gitId":"Fallman2"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":985,"author":{"gitId":"Fallman2"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":986,"author":{"gitId":"Fallman2"},"content":" + \"| |_| | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":987,"author":{"gitId":"Fallman2"},"content":" + \"| ___/| |_| | | __/\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":988,"author":{"gitId":"Fallman2"},"content":" + \"| | \\\\__,_|_|\\\\_\\\\___|\\n\"","lastModifiedDate":"2023-08-30"},{"lineNumber":989,"author":{"gitId":"Fallman2"},"content":" + \"|_|\";","lastModifiedDate":"2023-08-30"},{"lineNumber":990,"author":{"gitId":"Fallman2"},"content":" System.out.println(\"Salutations! I hereby would like to inform you that my identity is that of\\n\" + logo +","lastModifiedDate":"2023-08-30"},{"lineNumber":991,"author":{"gitId":"Fallman2"},"content":" \"\\nAn exceedingly verbose conversation simulation program.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":992,"author":{"gitId":"Fallman2"},"content":" System.out.println(SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":993,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":994,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":995,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":996,"author":{"gitId":"Fallman2"},"content":" * Returns the exit message.","lastModifiedDate":"2023-08-31"},{"lineNumber":997,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":998,"author":{"gitId":"Fallman2"},"content":" * @return The exit message.","lastModifiedDate":"2023-08-31"},{"lineNumber":999,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1000,"author":{"gitId":"Fallman2"},"content":" String exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":1001,"author":{"gitId":"Fallman2"},"content":" return \"It appears that the user has decided to close the program as indicated by the command of which this is the function being issued and therefore,\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1002,"author":{"gitId":"Fallman2"},"content":" \"I shall bid thee farewell and wish thee great fortune in your future endeavors.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1003,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1004,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1005,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1006,"author":{"gitId":"Fallman2"},"content":" * Returns the message for listing tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1007,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1008,"author":{"gitId":"Fallman2"},"content":" * @return The message for listing tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1009,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1010,"author":{"gitId":"Fallman2"},"content":" String list() {","lastModifiedDate":"2023-08-30"},{"lineNumber":1011,"author":{"gitId":"Fallman2"},"content":" return \"Here is the collection of items, previously designated to be known as Tasks, that you have inputted over a previous unspecified period of time\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1012,"author":{"gitId":"Fallman2"},"content":" \"that may or may not require urgent attention, but will nevertheless necessitate some level of action within an either\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1013,"author":{"gitId":"Fallman2"},"content":" \"indicated or not indicated time period.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1014,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1015,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1016,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1017,"author":{"gitId":"Fallman2"},"content":" * Returns the message for marking a task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":1018,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1019,"author":{"gitId":"Fallman2"},"content":" * @param index Index of the task that has been marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":1020,"author":{"gitId":"Fallman2"},"content":" * @return The message indicating that the task has been done.","lastModifiedDate":"2023-08-31"},{"lineNumber":1021,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1022,"author":{"gitId":"Fallman2"},"content":" String mark(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":1023,"author":{"gitId":"Fallman2"},"content":" return \"I have been made aware of your desire to indicate that the task numbered \" + index +","lastModifiedDate":"2023-08-30"},{"lineNumber":1024,"author":{"gitId":"Fallman2"},"content":" \" has been since been achieved as of the time at which you hve stipulated as so.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1025,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1026,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1027,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1028,"author":{"gitId":"Fallman2"},"content":" * Returns the message for marking a task as undone.","lastModifiedDate":"2023-09-04"},{"lineNumber":1029,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1030,"author":{"gitId":"Fallman2"},"content":" * @return The message indicating that that task has been unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":1031,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1032,"author":{"gitId":"Fallman2"},"content":" String unmark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":1033,"author":{"gitId":"Fallman2"},"content":" return \"Very well. I have acknowledged your request to unmark the task of specified index as having been completed and\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1034,"author":{"gitId":"Fallman2"},"content":" \"will now proceed to set said task of specified index to be considered as having not yet been completed.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1035,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1036,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1037,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1038,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new to do task has been added to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1039,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1040,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1041,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1042,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":1043,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1044,"author":{"gitId":"Fallman2"},"content":" String toDo(TaskList tl) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":1045,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require doing at a future time but with no such time being specified and inserted it into \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1046,"author":{"gitId":"Fallman2"},"content":" \"the overall collection of said tasks that require action.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1047,"author":{"gitId":"Fallman2"},"content":" \"Here is a display of the added deadline task: \" + tl.get(tl.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1048,"author":{"gitId":"Fallman2"},"content":" \"You now, in total, have \" + tl.size() + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1049,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1050,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1051,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1052,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new Deadline task has been added to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1053,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1054,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1055,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1056,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":1057,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1058,"author":{"gitId":"Fallman2"},"content":" String deadline(TaskList tl) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":1059,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require doing at a future time alongside the stipulated time that you have indicated and inserted it into \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1060,"author":{"gitId":"Fallman2"},"content":" \"the overall collection of these tasks that require action.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1061,"author":{"gitId":"Fallman2"},"content":" \"Here is a display of the added deadline task: \" + tl.get(tl.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1062,"author":{"gitId":"Fallman2"},"content":" \"You now, in total, have \" + tl.size() + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1063,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1064,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1065,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1066,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a new Event task has been added to the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1067,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1068,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1069,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1070,"author":{"gitId":"Fallman2"},"content":" * @throws PukeException If the task or values used in the list are out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":1071,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1072,"author":{"gitId":"Fallman2"},"content":" String event(TaskList tl) throws PukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":1073,"author":{"gitId":"Fallman2"},"content":" return \"Understood. I have hereby created a task known to require participation for a set period of time alongside this stipulated duration that you have indicated and inserted it into \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1074,"author":{"gitId":"Fallman2"},"content":" \"the overall collection of these tasks that require action.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1075,"author":{"gitId":"Fallman2"},"content":" \"Here is a display of the added deadline task: \" + tl.get(tl.size() - 1) + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1076,"author":{"gitId":"Fallman2"},"content":" \"You now, in total, have \" + tl.size() + \" of these tasks recorded within said collection.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1077,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1078,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1079,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1080,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that a Task has been removed from the list","lastModifiedDate":"2023-08-31"},{"lineNumber":1081,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1082,"author":{"gitId":"Fallman2"},"content":" * @param hold The task that was removed.","lastModifiedDate":"2023-08-31"},{"lineNumber":1083,"author":{"gitId":"Fallman2"},"content":" * @param tl The task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1084,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1085,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1086,"author":{"gitId":"Fallman2"},"content":" String delete(Task hold, TaskList tl) {","lastModifiedDate":"2023-08-30"},{"lineNumber":1087,"author":{"gitId":"Fallman2"},"content":" return \"I have acknowledged your request to have the task allocated to the specific index at which you have mentioned removed from the collection of all\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1088,"author":{"gitId":"Fallman2"},"content":" \"such tasks, colloquially known as your To Do list.\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1089,"author":{"gitId":"Fallman2"},"content":" \"The task in question that has been deleted is: \" + hold + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1090,"author":{"gitId":"Fallman2"},"content":" \"As of this current moment, there are a total of \" + tl.size() + \" occurrences of tasks in your list.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1091,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1092,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":1093,"author":{"gitId":"Fallman2"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":1094,"author":{"gitId":"Fallman2"},"content":" * Returns the message indicating that all tasks have been cleared from the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":1095,"author":{"gitId":"Fallman2"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":1096,"author":{"gitId":"Fallman2"},"content":" * @return The message.","lastModifiedDate":"2023-08-31"},{"lineNumber":1097,"author":{"gitId":"Fallman2"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":1098,"author":{"gitId":"Fallman2"},"content":" String clear() {","lastModifiedDate":"2023-08-30"},{"lineNumber":1099,"author":{"gitId":"Fallman2"},"content":" return \"Well I certainly hope you had meant to do that because I am not going too ask for your confirmation. As per the aforementioned instructions, I shall now\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":1100,"author":{"gitId":"Fallman2"},"content":" \"purge all of the tasks that you have previously recorded and designated as requiring attention.\";","lastModifiedDate":"2023-08-30"},{"lineNumber":1101,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":1102,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":1103,"author":{"gitId":"Fallman2"},"content":" String find() {","lastModifiedDate":"2023-08-31"},{"lineNumber":1104,"author":{"gitId":"Fallman2"},"content":" return \"As per the instructions provided, I shall initiate a search into your list of items, of which we have previously declared to be known as tasks due too their relatively \\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":1105,"author":{"gitId":"Fallman2"},"content":" \"urgent need of attention within a specified or unspecified frame of time, for those of which have an alphabetical similarity to the frame of reference that you have provided.\";","lastModifiedDate":"2023-08-31"},{"lineNumber":1106,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":1107,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Fallman2":1105,"-":2}},{"path":"src/test/java/puke/PukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"package puke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"public class PukeTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":" public void ParserTests() throws PukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ExitCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ExitCommand(\"\"), Parser.parse(\"bye\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ListCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ListCommand(\"\"), Parser.parse(\"list\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing MarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":" assertEquals(new MarkCommand(\"3\"), Parser.parse(\"mark\", \" 3\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing UnmarkCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":" assertEquals(new UnmarkCommand(\"4\"), Parser.parse(\"unmark\", \" 4\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing TodoCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Fallman2"},"content":" assertEquals(new TodoCommand(\"borrow book\"), Parser.parse(\"todo\", \" borrow book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing DeadlineCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Fallman2"},"content":" assertEquals(new DeadlineCommand(\"return book /by 2019-12-01T10:00\"), Parser.parse(\"deadline\", \" return book /by 2019-12-01T10:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing EventCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Fallman2"},"content":" assertEquals(new EventCommand(\"project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00\"), Parser.parse(\"event\", \" project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing DeleteCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Fallman2"},"content":" assertEquals(new DeleteCommand(\"5\"), Parser.parse(\"delete\", \" 5\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ClearCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ClearCommand(\"\"), Parser.parse(\"clearall\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ErrorCommand 1","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Fallman2"},"content":" //assertEquals(new ErrorCommand(), Parser.parse(\"bye\", \"123\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Fallman2"},"content":" //Testing Parsing ErrorCommand 2","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Fallman2"},"content":" assertEquals(new ErrorCommand(), Parser.parse(\"todo\", \"\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Fallman2"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Fallman2"},"content":" public void UiMessageTests() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Fallman2"},"content":" //Testing of Ui Exit Message","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Fallman2"},"content":" assertEquals(\"It appears that the user has decided to close the program as indicated by the command of which this is the function being issued and therefore,\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Fallman2"},"content":" \"I shall bid thee farewell and wish thee great fortune in your future endeavors.\", new Ui().exit());","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Fallman2"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Fallman2"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Fallman2":41}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Fallman2"},"content":"todo borrow book","lastModifiedDate":"2023-08-22"},{"lineNumber":2,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"Fallman2"},"content":"deadline return book /by 2019-12-01T10:00","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Fallman2"},"content":"event project meeting /from 2023-08-30T14:00 /to 2023-08-30T16:00","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Fallman2"},"content":"mark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":6,"author":{"gitId":"Fallman2"},"content":"mark 2","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"Fallman2"},"content":"unmark 3","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"Fallman2"},"content":"Inv","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"Fallman2"},"content":"list 2","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"Fallman2"},"content":"mark 24","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"Fallman2"},"content":"todo","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"Fallman2"},"content":"deadline","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"Fallman2"},"content":"event","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":16,"author":{"gitId":"Fallman2"},"content":"delete 1","lastModifiedDate":"2023-08-22"},{"lineNumber":17,"author":{"gitId":"Fallman2"},"content":"list","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"Fallman2"},"content":"bye","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"Fallman2"},"content":"","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"Fallman2":19}}] diff --git a/Fallman2_ip_master/commits.json b/Fallman2_ip_master/commits.json index cf57abd6..85744309 100644 --- a/Fallman2_ip_master/commits.json +++ b/Fallman2_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Fallman2":[{"date":"2023-08-22","commitResults":[{"hash":"79f0ee3f9a8ef1fc41493eab0f112813ca17ee95","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":4}}},{"hash":"dd75b847fa79c8ba7bf77f5460e99a1069799977","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"1053f207bc65c976dd543199abb2c3c6312dccfb","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"8f0d076a6df516a82b888a07c2df4bca4e2f755d","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":9}}},{"hash":"2dc56b6801339dc6800ebebb9763788faa34e80f","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":9}}},{"hash":"c77f426db59695a6d42aab7cb32000b84f745c7a","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"90903133e7f8dec88d17b59ab17fa9da56eac791","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":61,"deletions":10}}},{"hash":"b1bf5c50fd6e0d40afc3fbcb257bc74d7b0d128e","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":30,"deletions":0}}},{"hash":"7467b3a18f5cd474512ce4529b35bb6de24816a5","isMergeCommit":false,"messageTitle":"Touching Up","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}}]},{"date":"2023-08-30","commitResults":[{"hash":"d67d63eb872f4f91a395897dc9945bc47993048e","isMergeCommit":false,"messageTitle":"Update file name and edited isEmpty() condition check","messageBody":"File name was previously Duke, unchanged from the original despite the change in the name since the first commit. There was also a condition check that could have been shortened.\n\nFile name has been appropriately changed and the condition has been updated.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"aed13482d4600db0f899d11ee2cce50c7fd2b32f","isMergeCommit":false,"messageTitle":"Create new class to handle data","messageBody":"The chatbot previously did not have a way to handle storing data after closing.\n\nTo prepare for the implementationn of data storage, a text file has been created alongside a directory and a new class, DataHandler is created to translate this file into\nrespective Tasks.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":62,"deletions":3}}},{"hash":"7cf81b2ae259faabf0188b91bfee76202f9c212d","isMergeCommit":false,"messageTitle":"Complete saving function","messageBody":"The saving function was previously only implemented partiallly. There were also some display bugs where the separator line was not printed where it should have been.\n\nCompleted the saving function and fixed the bugs.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":54,"deletions":12}}},{"hash":"4d1f47888f2f581d0319bb9ab5d066d14941a8a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a6d14b602bef93b0abb2f279397a33f683377974","isMergeCommit":false,"messageTitle":"Implement LocalDateTime Support","messageBody":"Events and deadlines did not properly use dates and times in their implementation previously, allowing for unmeaningful dates and times.\n\nLocalDateTime has been implemented and some small String irregularities have been fixed\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"java":{"insertions":33,"deletions":13}}},{"hash":"2e8e420c4c24d4135590d6305d623069bb66c7e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"c4fea4c3d4d882c9b5cca496f6cbf834ce4558bc","isMergeCommit":false,"messageTitle":"Add new classes for extra OOP","messageBody":"Previous implementation had too many steps crammed into the main method, leading to messy code.\n\nAdded Command classes and subclasses to categorize the commands.\n","fileTypesAndContributionMap":{"java":{"insertions":302,"deletions":0}}},{"hash":"70de344a70f178495b5b1c5fe958eb5ed40ccefb","isMergeCommit":false,"messageTitle":"Add Ui class and fix errors in command classes","messageBody":"Ui displays are still executed in main class and could be furthur separated with oop\n\nCreated the UI class to store all UI messages.\n","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":44}}},{"hash":"66d74815124b8dc656259ad914182a6ccf81cec9","isMergeCommit":false,"messageTitle":"Update main method in Puke class","messageBody":"After all the classes were changed in the previous commit, the main class no longer ran properly.\n\nChanged the main class too run properly with the new coode\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":99,"deletions":192}}},{"hash":"c8a0ccc922d8e477e72a1e7ec13cd0dcc49f3f20","isMergeCommit":false,"messageTitle":"Add files to a package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"bba8d6f36f732e8bdc650fb9fbac4bc523ec2b84","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"2c985ccd681799d1cebc6777fbb76f7ecababaff","isMergeCommit":false,"messageTitle":"Add sample JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":1}}},{"hash":"cbbf20bc4ab18af3714c509ef9f4e6cf5526592c","isMergeCommit":false,"messageTitle":"Edit build.gradle to properly save a jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"05e33b6a4391bef0b942663eace2ae0f32075011","isMergeCommit":false,"messageTitle":"Update Puke.java to fit coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":39}}},{"hash":"5e309e1dba4de29efc9e0b72aea6c790aa617609","isMergeCommit":false,"messageTitle":"Add new find feature","messageBody":"There was no way to look for specific tasks previously\n\nAdded a way to filter tasks\n","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"5c6651752e72c4c2621e2c0f513ecac5327c4ef6","isMergeCommit":false,"messageTitle":"Add comments for proper Javadoc documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":347,"deletions":5}}},{"hash":"dd82d71e4b857d8e0c677af6bb794154322b86e3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"c4e0f3ba4f0c01db3551ad738fae0818ce93afd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"ef7439923a1c4c1b2b61b69042102ce6d08ab870","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"#\tsrc/main/java/puke/Puke.java\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Fallman2":{"java":1146,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":2,"txt":19}},"authorContributionVariance":{"Fallman2":81440.51},"authorDisplayNameMap":{"Fallman2":"CS2103-F13-4 ANDR..IANG"}} +{"authorDailyContributionsMap":{"Fallman2":[{"date":"2023-08-22","commitResults":[{"hash":"79f0ee3f9a8ef1fc41493eab0f112813ca17ee95","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":4}}},{"hash":"dd75b847fa79c8ba7bf77f5460e99a1069799977","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}},{"hash":"1053f207bc65c976dd543199abb2c3c6312dccfb","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"8f0d076a6df516a82b888a07c2df4bca4e2f755d","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":50,"deletions":9}}},{"hash":"2dc56b6801339dc6800ebebb9763788faa34e80f","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":9}}},{"hash":"c77f426db59695a6d42aab7cb32000b84f745c7a","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0}}},{"hash":"90903133e7f8dec88d17b59ab17fa9da56eac791","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":61,"deletions":10}}},{"hash":"b1bf5c50fd6e0d40afc3fbcb257bc74d7b0d128e","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":30,"deletions":0}}},{"hash":"7467b3a18f5cd474512ce4529b35bb6de24816a5","isMergeCommit":false,"messageTitle":"Touching Up","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":10}}}]},{"date":"2023-08-30","commitResults":[{"hash":"d67d63eb872f4f91a395897dc9945bc47993048e","isMergeCommit":false,"messageTitle":"Update file name and edited isEmpty() condition check","messageBody":"File name was previously Duke, unchanged from the original despite the change in the name since the first commit. There was also a condition check that could have been shortened.\n\nFile name has been appropriately changed and the condition has been updated.\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"aed13482d4600db0f899d11ee2cce50c7fd2b32f","isMergeCommit":false,"messageTitle":"Create new class to handle data","messageBody":"The chatbot previously did not have a way to handle storing data after closing.\n\nTo prepare for the implementationn of data storage, a text file has been created alongside a directory and a new class, DataHandler is created to translate this file into\nrespective Tasks.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":62,"deletions":3}}},{"hash":"7cf81b2ae259faabf0188b91bfee76202f9c212d","isMergeCommit":false,"messageTitle":"Complete saving function","messageBody":"The saving function was previously only implemented partiallly. There were also some display bugs where the separator line was not printed where it should have been.\n\nCompleted the saving function and fixed the bugs.\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":54,"deletions":12}}},{"hash":"4d1f47888f2f581d0319bb9ab5d066d14941a8a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"a6d14b602bef93b0abb2f279397a33f683377974","isMergeCommit":false,"messageTitle":"Implement LocalDateTime Support","messageBody":"Events and deadlines did not properly use dates and times in their implementation previously, allowing for unmeaningful dates and times.\n\nLocalDateTime has been implemented and some small String irregularities have been fixed\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":5},"java":{"insertions":33,"deletions":13}}},{"hash":"2e8e420c4c24d4135590d6305d623069bb66c7e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"c4fea4c3d4d882c9b5cca496f6cbf834ce4558bc","isMergeCommit":false,"messageTitle":"Add new classes for extra OOP","messageBody":"Previous implementation had too many steps crammed into the main method, leading to messy code.\n\nAdded Command classes and subclasses to categorize the commands.\n","fileTypesAndContributionMap":{"java":{"insertions":302,"deletions":0}}},{"hash":"70de344a70f178495b5b1c5fe958eb5ed40ccefb","isMergeCommit":false,"messageTitle":"Add Ui class and fix errors in command classes","messageBody":"Ui displays are still executed in main class and could be furthur separated with oop\n\nCreated the UI class to store all UI messages.\n","fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":44}}},{"hash":"66d74815124b8dc656259ad914182a6ccf81cec9","isMergeCommit":false,"messageTitle":"Update main method in Puke class","messageBody":"After all the classes were changed in the previous commit, the main class no longer ran properly.\n\nChanged the main class too run properly with the new coode\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":99,"deletions":192}}},{"hash":"c8a0ccc922d8e477e72a1e7ec13cd0dcc49f3f20","isMergeCommit":false,"messageTitle":"Add files to a package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"bba8d6f36f732e8bdc650fb9fbac4bc523ec2b84","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"2c985ccd681799d1cebc6777fbb76f7ecababaff","isMergeCommit":false,"messageTitle":"Add sample JUnit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":1}}},{"hash":"cbbf20bc4ab18af3714c509ef9f4e6cf5526592c","isMergeCommit":false,"messageTitle":"Edit build.gradle to properly save a jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"05e33b6a4391bef0b942663eace2ae0f32075011","isMergeCommit":false,"messageTitle":"Update Puke.java to fit coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":39}}},{"hash":"5e309e1dba4de29efc9e0b72aea6c790aa617609","isMergeCommit":false,"messageTitle":"Add new find feature","messageBody":"There was no way to look for specific tasks previously\n\nAdded a way to filter tasks\n","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}},{"hash":"5c6651752e72c4c2621e2c0f513ecac5327c4ef6","isMergeCommit":false,"messageTitle":"Add comments for proper Javadoc documentation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":347,"deletions":5}}},{"hash":"dd82d71e4b857d8e0c677af6bb794154322b86e3","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"c4e0f3ba4f0c01db3551ad738fae0818ce93afd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"ef7439923a1c4c1b2b61b69042102ce6d08ab870","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"#\tsrc/main/java/puke/Puke.java\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"b9fd5258d594af38889b83bbd4920d6b4cd7e57d","isMergeCommit":false,"messageTitle":"Correct grammar errors in Javadoc comments","messageBody":"Certain grammatically incorrect words were being used previously in the Javadoc comments\n\nChanged these words to be grammatically correct\n","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"Fallman2":{"java":1146,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":2,"txt":19}},"authorContributionVariance":{"Fallman2":66463.36},"authorDisplayNameMap":{"Fallman2":"CS2103-F13-4 ANDR..IANG"}} diff --git a/JasonRay168_ip_master/authorship.json b/JasonRay168_ip_master/authorship.json index df16cfe4..58d50ce5 100644 --- a/JasonRay168_ip_master/authorship.json +++ b/JasonRay168_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"JasonRay168":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Input;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * The main class for Duke Chatbot","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store task list */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle list of tasks operations */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user interactions */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user inputs */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of Duke chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * @param filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" if (storage.fileExists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList(storage.loadTasksData());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" * Starts the execution of the chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" ui.greet();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" boolean endSession \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" while (endSession) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" String userInput \u003d ui.startInputSession();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" Input parsedInput \u003d parser.parse(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" endSession \u003d ui.handleInput(tasks, parsedInput, parser);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" tasks.overwriteTasksData(storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" new Duke(\"./tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":59}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Parent exception for all custom exceptions","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/EmptyListException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the list is empty","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class EmptyListException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public EmptyListException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the input command doesn\u0027t exist","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidCommandException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/InvalidCommandSyntaxException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the command is typed wrongly","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidCommandSyntaxException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidCommandSyntaxException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task number is out of bounds","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidTaskNumberException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/InvalidTaskTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates there is missing information on time inputs","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidTaskTimeException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidTaskTimeException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/MissingTaskDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task is missing its description","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskDescriptionException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskDescriptionException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/MissingTaskNameException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task has no name","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskNameException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskNameException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/MissingTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates no number was inputted","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskNumberException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/utilities/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Deadline task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\t","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /** Deadline of a deadline task */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" private String deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" * Creates new instance of a deadline task","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" * @param deadline Deadline of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.DEADLINE, \" (by: \" + deadline + \")\");","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" public String getDeadline() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" return this.deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":25}},{"path":"src/main/java/duke/utilities/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Event task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"\t","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /** Start time of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" private String startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" /** End time of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" private String endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of an event task","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * @param startDate Start time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" * @param endDate End time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" public Event(String name, String startDate, String endDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.EVENT, \" (from: \" + startDate + \" to: \" + endDate + \")\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" public String getStart() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" return this.startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public String getEnd() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" return this.endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":34}},{"path":"src/main/java/duke/utilities/Input.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Deals with storing input data","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Input {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t/** Variable to store the command section of the input string */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" private String command;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t/** Variable to store the full input */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" private String fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"\t/** Variable to store the number of words inside the input */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" private int wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of an Input object","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" * @param command The name of the command to be called","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full String input typed in by the user","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" * @param wordLength The number of words in the input","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" public Input(String command, String fullInput, int wordLength) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" this.fullInput \u003d fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" this.wordLength \u003d wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" return this.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" public int getLength() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" return this.wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" public String getFullInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" return this.fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":41}},{"path":"src/main/java/duke/utilities/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Deals with making sense of user commands","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"\t * Parses the user input to identify its important parts","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"\t * @param input","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"\t * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" public Input parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" String[] split \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" String command \u003d split[0].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" int length \u003d split.length;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" return new Input(command, input, length);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" * Parses and formats the date input into another format","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" * @param strDate Date in String format","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * @return Date in \"MMM dd yyyy\" format","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public String formatDate(String strDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" String result \u003d \"Invalid date\";","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" LocalDate parseDate \u003d LocalDate.parse(strDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" result \u003d parseDate.format(formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e + \"\\nDate needs to be in the form of yyyy-mm-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" return result;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":42}},{"path":"src/main/java/duke/utilities/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" * Handles loading and saving tasks into the tasks.txt file","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store relative file path */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" private File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"\t/** Variable to check if File already exists */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" private boolean isCreated;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"\t * Creates new Storage objects to store filpath and file","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"\t * ","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"\t * @param filePath Path of the tasks.txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" this.isCreated \u003d !file.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! IOException\" + e);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" * Overwrites existing data in tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" * @param tasks List of tasks that will overwrite the data in the file","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" FileOutputStream fos \u003d new FileOutputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" ObjectOutputStream oos \u003d new ObjectOutputStream(fos);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" oos.writeObject(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" oos.flush();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" oos.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! File is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" * Loads the data from tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" * @return A list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" public ArrayList\u003cTask\u003e loadTasksData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" FileInputStream fis \u003d new FileInputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" ObjectInputStream ois \u003d new ObjectInputStream(fis);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d (ArrayList\u003cTask\u003e) ois.readObject();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" ois.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! File is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" } catch (ClassNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! Class is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" public boolean fileExists() {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" return this.isCreated;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":82}},{"path":"src/main/java/duke/utilities/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":" * Class for tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" /** Name of task */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" private String name;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" /** Task description, including time */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" /** Variable to reflect whether a task is finished */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" /** Type of task, can be either a todo, deadline, or event */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" private Type type;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of a Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" * @param type Type of task","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" * @param description Task description, which includes by, to, and from","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" public Task(String name, Type type, String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" * Marks a task as done","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have marked this task as done\");","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + this.convertToString());","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" * Marks a task as not done","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have marked this task as not done\");","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + this.convertToString());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" * Converts the task object to a String text for display","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" * @return the String representation of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" public String convertToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" return \"[\" + this.getType().charAt(0) + \"]\" ","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":"\t\t\t\t+ \"[\" + (this.isDone() ? \"X\" : \" \") + \"] \"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":"\t\t\t\t+ this.getName() + this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" public String getName() {","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" return this.name;","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" public String getType() {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" return this.type.name();","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"JasonRay168":76}},{"path":"src/main/java/duke/utilities/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidTaskNumberException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Contains the task list and its operations","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the tasks */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" * Creates a TaskList with a predefined list","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * @param tasks List to be stored inside the local list variable","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" * Creates a TaskList with an empty list","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" * Manipulates the data of existing tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" * Includes marking, unmarking, and deleting tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput Full String input by user","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" * @param command First word of input that signifies the command to be run","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" * @param beginIndex Beginning index of the command description excluding the command itself","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskNumberException","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" public void manipulateTasks(String fullInput, String command, int beginIndex) throws InvalidTaskNumberException {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" int taskNum \u003d Integer.parseInt(fullInput.substring(beginIndex));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" if (taskNum \u003e this.getSize() || taskNum \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskNumberException(\"Task number is out of bounds, please try again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" this.getTask(taskNum - 1).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" this.getTask(taskNum - 1).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" this.deleteTask(this.getTask(taskNum - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" * Adds a todo task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" public void addToDo(String taskName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" ToDo task \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[T][ ] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" * Adds a deadline task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" * @param deadline Deadline date of task","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" public void addDeadline(String taskName, String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" Deadline task \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[D][ ] \" + taskName + \" (by: \" + deadline + \")\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + this.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" * Adds an event task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" * @param start Start date of task","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" * @param end End date of task","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":" public void addEvent(String taskName, String startDate, String endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" Event task \u003d new Event(taskName, startDate, endDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[E][ ] \" + taskName + \" (from: \" + startDate + \" to: \" + endDate + \")\");","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"JasonRay168"},"content":" * Deletes a task from the list","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"JasonRay168"},"content":" * @param task Task to be deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"JasonRay168"},"content":" public void deleteTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have deleted a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + task.convertToString());","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"JasonRay168"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + this.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"JasonRay168"},"content":"\t * Copies and filters the task list to only display tasks with the keyword mentioned","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"JasonRay168"},"content":"\t * @param keyword The keyword that will be compared to the task names","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"JasonRay168"},"content":"\t * @return The filtered list","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"JasonRay168"},"content":"\tpublic ArrayList\u003cTask\u003e filterTaskName(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"JasonRay168"},"content":"\t\tArrayList\u003cTask\u003e tasksCopied \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"JasonRay168"},"content":"\t\ttasksCopied.removeIf(task -\u003e !task.getName().toLowerCase().contains(keyword.toLowerCase()));","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"JasonRay168"},"content":"\t\treturn tasksCopied;","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"JasonRay168"},"content":"\t}","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"JasonRay168"},"content":" * Overwrites the current list with the list stored in hard drive","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"JasonRay168"},"content":" * @param storage Storage object that points to the stored file","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"JasonRay168"},"content":" storage.overwriteTasksData(this.tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"JasonRay168"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"JasonRay168"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"JasonRay168"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"JasonRay168"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":140}},{"path":"src/main/java/duke/utilities/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Todo task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of a ToDo task","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.TODO, \"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/utilities/Type.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Enum class to declare types of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public enum Type {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" TODO,","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" DEADLINE,","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" EVENT;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/duke/utilities/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.EmptyListException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidCommandSyntaxException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidTaskTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.MissingTaskDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.MissingTaskNameException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.MissingTaskNumberException;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" * Handles user interaction","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" /** Variable to detect user input */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" /** Variable to show horizontal lines */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" public static final String LINE_BREAK \u003d (\"--------------------------------------------------\"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" + \"---------------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * Prints greetings to the user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public void greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"Welcome. My name is Duke\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"What will you do today?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" * Allows users to type in their inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" * @return Input as String","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" public String startInputSession() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" String input \u003d sc.nextLine().trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" return input;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" * Shows the contents of the list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidCommandSyntaxException If there are words after the \"list\" command","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" public void showList(TaskList tasks, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" throws InvalidCommandSyntaxException {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003e 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027list\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" if (tasks.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"List is empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" for (int i \u003d 1; i \u003c tasks.getSize() + 1; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" Task current \u003d tasks.getTask(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" System.out.println(i + \". \" + current.convertToString());","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" * Shows output text when a task is marked, unmarked, or deleted","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" * @param command The first word of the input","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNumberException If the command is not followed by any number","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" * @throws EmptyListException If the list of tasks is empty","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskNumberException If the task number to be manipulated does not exist","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" public void showManipulateTasks(TaskList tasks, String command, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskNumberException, EmptyListException, InvalidTaskNumberException {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNumberException(\"Task number cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" } else if (tasks.getSize() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" throw new EmptyListException(\"List is currently empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"mark\", 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"unmark\", 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"delete\", 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when a todo task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"JasonRay168"},"content":" public void showAddToDo(TaskList tasks, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Todo task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d fullInput.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"JasonRay168"},"content":" tasks.addToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when a deadline task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"JasonRay168"},"content":" * @param parser The parser to parse dates","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNameException If the task name is not specified","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskTimeException If there are missing or more than one deadlines","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"JasonRay168"},"content":" public void showAddDeadline(TaskList tasks, String fullInput, int numberOfWords, Parser parser)","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException, MissingTaskNameException, InvalidTaskTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Deadline task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(9).split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(\"Deadline task must have exactly one /by deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Deadline task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"JasonRay168"},"content":" String strDeadline \u003d taskDesc[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"JasonRay168"},"content":" String deadline \u003d parser.formatDate(strDeadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"JasonRay168"},"content":" if (!deadline.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"JasonRay168"},"content":" tasks.addDeadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when an event task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"JasonRay168"},"content":" * @param parser The parser to parse dates","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNameException If the task name is not specified","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskTimeException If there are missing or more than one start or end dates","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"JasonRay168"},"content":" public void showAddEvent(TaskList tasks, String fullInput, int numberOfWords, Parser parser)","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException, MissingTaskNameException, InvalidTaskTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Event task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(6).split(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one /from and one /to times, in that order\");","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"JasonRay168"},"content":" String[] fromAndTo \u003d taskDesc[1].split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"JasonRay168"},"content":" if (fromAndTo.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one /from and one /to times, in that order\");","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Event task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"JasonRay168"},"content":" String strStart \u003d fromAndTo[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"JasonRay168"},"content":" String strEnd \u003d fromAndTo[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"JasonRay168"},"content":" String start \u003d parser.formatDate(strStart);","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"JasonRay168"},"content":" if (!start.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"JasonRay168"},"content":" String end \u003d parser.formatDate(strEnd);","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"JasonRay168"},"content":" if (!end.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"JasonRay168"},"content":" tasks.addEvent(taskName, start, end);","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":193,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":194,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":195,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":196,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":197,"author":{"gitId":"JasonRay168"},"content":" * Shows text output of the result for searching tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":198,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":199,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":200,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":201,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":204,"author":{"gitId":"JasonRay168"},"content":" public void showFind(TaskList tasks, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-03"},{"lineNumber":205,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":206,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Todo task description cannot be empty\");","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"JasonRay168"},"content":" String taskToBeFound \u003d fullInput.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasksFiltered \u003d tasks.filterTaskName(taskToBeFound);","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"JasonRay168"},"content":" int size \u003d tasksFiltered.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"JasonRay168"},"content":" if (size \u003e 0) { ","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"JasonRay168"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"JasonRay168"},"content":" System.out.println((i + 1) + \". \" + tasksFiltered.get(i).convertToString());","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are no matching tasks in your list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":222,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":223,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when the user exits the chatbot","lastModifiedDate":"2023-09-03"},{"lineNumber":224,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":225,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":226,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":227,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidCommandSyntaxException If there are words after the \"bye\" command","lastModifiedDate":"2023-09-03"},{"lineNumber":228,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":229,"author":{"gitId":"JasonRay168"},"content":" public void showBye(TaskList tasks, int numberOfWords)","lastModifiedDate":"2023-09-03"},{"lineNumber":230,"author":{"gitId":"JasonRay168"},"content":" throws InvalidCommandSyntaxException {","lastModifiedDate":"2023-09-03"},{"lineNumber":231,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003e 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":232,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027bye\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"I hope you enjoy my service. Thank you and goodbye\");","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":237,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":238,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":239,"author":{"gitId":"JasonRay168"},"content":" * Handles the various cases of user inputs","lastModifiedDate":"2023-09-03"},{"lineNumber":240,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":241,"author":{"gitId":"JasonRay168"},"content":" * @param tasks TaskList object that contains the list","lastModifiedDate":"2023-09-03"},{"lineNumber":242,"author":{"gitId":"JasonRay168"},"content":" * @param input Input object that contains parsed user input","lastModifiedDate":"2023-09-03"},{"lineNumber":243,"author":{"gitId":"JasonRay168"},"content":" * @param parser Parser used to parse user inputs","lastModifiedDate":"2023-09-03"},{"lineNumber":244,"author":{"gitId":"JasonRay168"},"content":" * @return True or false signifying breaking or continuing the loop","lastModifiedDate":"2023-09-03"},{"lineNumber":245,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":246,"author":{"gitId":"JasonRay168"},"content":" public boolean handleInput(TaskList tasks, Input input, Parser parser) {","lastModifiedDate":"2023-09-03"},{"lineNumber":247,"author":{"gitId":"JasonRay168"},"content":" boolean endSession \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":248,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":249,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":250,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":251,"author":{"gitId":"JasonRay168"},"content":" int numberOfWords \u003d input.getLength();","lastModifiedDate":"2023-09-03"},{"lineNumber":252,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-09-03"},{"lineNumber":253,"author":{"gitId":"JasonRay168"},"content":" case \"list\":","lastModifiedDate":"2023-09-03"},{"lineNumber":254,"author":{"gitId":"JasonRay168"},"content":" showList(tasks, fullInput, numberOfWords);","lastModifiedDate":"2023-09-03"},{"lineNumber":255,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":256,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-09-03"},{"lineNumber":257,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-03"},{"lineNumber":258,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-09-03"},{"lineNumber":259,"author":{"gitId":"JasonRay168"},"content":" showManipulateTasks(tasks, command, fullInput, numberOfWords);","lastModifiedDate":"2023-09-03"},{"lineNumber":260,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":261,"author":{"gitId":"JasonRay168"},"content":" case \"todo\":","lastModifiedDate":"2023-09-03"},{"lineNumber":262,"author":{"gitId":"JasonRay168"},"content":" showAddToDo(tasks, fullInput, numberOfWords);","lastModifiedDate":"2023-09-03"},{"lineNumber":263,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":264,"author":{"gitId":"JasonRay168"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-03"},{"lineNumber":265,"author":{"gitId":"JasonRay168"},"content":" showAddDeadline(tasks, fullInput, numberOfWords, parser);","lastModifiedDate":"2023-09-03"},{"lineNumber":266,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":267,"author":{"gitId":"JasonRay168"},"content":" case \"event\":","lastModifiedDate":"2023-09-03"},{"lineNumber":268,"author":{"gitId":"JasonRay168"},"content":" showAddEvent(tasks, fullInput, numberOfWords, parser);","lastModifiedDate":"2023-09-03"},{"lineNumber":269,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":270,"author":{"gitId":"JasonRay168"},"content":" case \"find\":","lastModifiedDate":"2023-09-03"},{"lineNumber":271,"author":{"gitId":"JasonRay168"},"content":" showFind(tasks, fullInput, numberOfWords);","lastModifiedDate":"2023-09-03"},{"lineNumber":272,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":273,"author":{"gitId":"JasonRay168"},"content":" case \"bye\":","lastModifiedDate":"2023-09-03"},{"lineNumber":274,"author":{"gitId":"JasonRay168"},"content":" showBye(tasks, numberOfWords);","lastModifiedDate":"2023-09-03"},{"lineNumber":275,"author":{"gitId":"JasonRay168"},"content":" endSession \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":277,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":278,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandException(\"No such command exists, please try again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"JasonRay168"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":282,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":283,"author":{"gitId":"JasonRay168"},"content":" return endSession;","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":285}},{"path":"src/test/java/duke/utilities/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" public void test1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"todo eat\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"todo eat\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" public void test2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"event camp /from 2023-03-05 /to 2023-03-06\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 6);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"event camp /from 2023-03-05 /to 2023-03-06\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" public void test3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"hello world, nice to meet you all\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"hello\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 7);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"hello world, nice to meet you all\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" public void test4() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" String formattedDate \u003d parser.formatDate(\"2023-09-03\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" assertEquals(formattedDate, \"Sep 03 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" public void test5() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" String formattedDate \u003d parser.formatDate(\"August 23, 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" assertEquals(formattedDate, \"Invalid date\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":54}},{"path":"src/test/java/duke/utilities/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" public void test1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" Task task \u003d new Task(\"homework\", Type.DEADLINE, \" (by: Aug 03 2023)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" assertEquals(task.isDone(), true);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" assertEquals(task.isDone(), false);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" String stringRepresentation \u003d task.convertToString();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" assertEquals(\"[D][X] homework (by: Aug 03 2023)\", stringRepresentation);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"todo borrow book from the library","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"deadline return book to library /by 2023-04-24","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"deadline submit homework by 2023-04-24","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"event concert /from 2023-03-24 /to 2023-03-26","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"event project meeting /from 2023-04-24 to 2023-04-25","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"event /from 2023-04-24 /to 2023-04-25","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"delete 1","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"mark","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"unmark","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"delete","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"mark 100","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"unmark 0","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"delete -3","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":28}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"javac -cp ..\\src\\main\\java\\ -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":19,"JasonRay168":2}},{"path":"tasks.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"JasonRay168":0}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"JasonRay168":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Input;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * The main class for Duke Chatbot","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store task list */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle list of tasks operations */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user interactions */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user inputs */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of Duke chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * @param filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" if (storage.fileExists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList(storage.loadTasksData());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" * Starts the execution of the chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" ui.greet();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" boolean endSession \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" while (endSession) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" String userInput \u003d ui.startInputSession();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" Input parsedInput \u003d parser.parse(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" endSession \u003d ui.handleInput(tasks, parsedInput, parser);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" tasks.overwriteTasksData(storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" new Duke(\"./tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":59}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Parent exception for all custom exceptions","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public DukeException(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/EmptyListException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the list is empty","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class EmptyListException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public EmptyListException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the input command doesn\u0027t exist","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidCommandException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/InvalidCommandSyntaxException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the command is typed wrongly","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidCommandSyntaxException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidCommandSyntaxException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task number is out of bounds","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidTaskNumberException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/InvalidTaskTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates there is missing information on time inputs","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class InvalidTaskTimeException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public InvalidTaskTimeException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/MissingTaskDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task is missing its description","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskDescriptionException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskDescriptionException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/MissingTaskNameException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates the task has no name","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskNameException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskNameException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/exceptions/MissingTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Exception class that indicates no number was inputted","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class MissingTaskNumberException extends DukeException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public MissingTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/utilities/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Deadline task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /** Deadline of a deadline task */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" private String deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" * Creates new instance of a deadline task","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" * @param deadline Deadline of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.DEADLINE, \" (by: \" + deadline + \")\");","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" public String getDeadline() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" return this.deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":25}},{"path":"src/main/java/duke/utilities/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Event task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /** Start time of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" private String startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" /** End time of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" private String endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of an event task","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * @param startDate Start time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" * @param endDate End time of task","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" public Event(String name, String startDate, String endDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.EVENT, \" (from: \" + startDate + \" to: \" + endDate + \")\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" public String getStart() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" return this.startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public String getEnd() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" return this.endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":34}},{"path":"src/main/java/duke/utilities/Input.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Deals with storing input data","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class Input {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the command section of the input string */","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" private String command;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the full input */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" private String fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the number of words inside the input */","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" private int wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of an Input object","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" * @param command The name of the command to be called","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full String input typed in by the user","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" * @param wordLength The number of words in the input","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" public Input(String command, String fullInput, int wordLength) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" this.command \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" this.fullInput \u003d fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" this.wordLength \u003d wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" public String getCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" return this.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" public int getLength() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" return this.wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" public String getFullInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" return this.fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":41}},{"path":"src/main/java/duke/utilities/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Deals with making sense of user commands","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" * Parses the user input to identify its important parts","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" * @param input","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" public Input parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" String[] split \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" String command \u003d split[0].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" int length \u003d split.length;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" return new Input(command, input, length);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" * Parses and formats the date input into another format","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" * @param strDate Date in String format","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * @return Date in \"MMM dd yyyy\" format","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public String formatDate(String strDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" String result \u003d \"Invalid date\";","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" LocalDate parseDate \u003d LocalDate.parse(strDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" result \u003d parseDate.format(formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e + \"\\nDate needs to be in the form of yyyy-mm-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" return result;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":42}},{"path":"src/main/java/duke/utilities/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" * Handles loading and saving tasks into the tasks.txt file","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store relative file path */","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" private File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" /** Variable to check if File already exists */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" private boolean isCreated;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" * Creates new Storage objects to store filpath and file","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" * @param filePath Path of the tasks.txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" this.isCreated \u003d !file.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! IOException\" + e);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" * Overwrites existing data in tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" * @param tasks List of tasks that will overwrite the data in the file","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" FileOutputStream fos \u003d new FileOutputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" ObjectOutputStream oos \u003d new ObjectOutputStream(fos);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" oos.writeObject(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" oos.flush();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" oos.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! File is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" * Loads the data from tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" * @return A list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" public ArrayList\u003cTask\u003e loadTasksData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" FileInputStream fis \u003d new FileInputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" ObjectInputStream ois \u003d new ObjectInputStream(fis);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d (ArrayList\u003cTask\u003e) ois.readObject();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" ois.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! File is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" } catch (ClassNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! Class is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" * Checks whether file already exists or not","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" * @return Value of isCreated","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" public boolean fileExists() {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" return this.isCreated;","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":86}},{"path":"src/main/java/duke/utilities/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":" * Class for tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" /** Name of task */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" private String name;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" /** Task description, including time */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" /** Variable to reflect whether a task is finished */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" /** Type of task, can be either a todo, deadline, or event */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" private Type type;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of a Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" * @param type Type of task","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" * @param description Task description, which includes by, to, and from","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" public Task(String name, Type type, String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" * Marks a task as done","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have marked this task as done\");","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + this.convertToString());","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" * Marks a task as not done","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have marked this task as not done\");","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + this.convertToString());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" * Converts the task object to a String text for display","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" * @return the String representation of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" public String convertToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" return \"[\" + this.getType().charAt(0) + \"]\"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" + \"[\" + (this.isDone() ? \"X\" : \" \") + \"] \"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" + this.getName() + this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" public String getName() {","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" return this.name;","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" public String getType() {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" return this.type.name();","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"JasonRay168":76}},{"path":"src/main/java/duke/utilities/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidTaskNumberException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Contains the task list and its operations","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the tasks */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" * Creates a TaskList with a predefined list","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * @param tasks List to be stored inside the local list variable","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" * Creates a TaskList with an empty list","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" * Manipulates the data of existing tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" * Includes marking, unmarking, and deleting tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput Full String input by user","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" * @param command First word of input that signifies the command to be run","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" * @param beginIndex Beginning index of the command description excluding the command itself","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskNumberException","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" public void manipulateTasks(String fullInput, String command, int beginIndex) throws InvalidTaskNumberException {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" int taskNum \u003d Integer.parseInt(fullInput.substring(beginIndex));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" if (taskNum \u003e this.getSize() || taskNum \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskNumberException(\"Task number is out of bounds, please try again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" this.getTask(taskNum - 1).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" this.getTask(taskNum - 1).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" this.deleteTask(this.getTask(taskNum - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" * Adds a todo task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" public void addToDo(String taskName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" ToDo task \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[T][ ] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" * Adds a deadline task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" * @param deadline Deadline date of task","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" public void addDeadline(String taskName, String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" Deadline task \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[D][ ] \" + taskName + \" (by: \" + deadline + \")\");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + this.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" * Adds an event task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" * @param startDate Start date of task","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":" * @param endDate End date of task","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" public void addEvent(String taskName, String startDate, String endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":" Event task \u003d new Event(taskName, startDate, endDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[E][ ] \" + taskName + \" (from: \" + startDate + \" to: \" + endDate + \")\");","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"JasonRay168"},"content":" * Deletes a task from the list","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"JasonRay168"},"content":" * @param task Task to be deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"JasonRay168"},"content":" public void deleteTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have deleted a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + task.convertToString());","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"JasonRay168"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + this.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"JasonRay168"},"content":" * Copies and filters the task list to only display tasks with the keyword mentioned","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"JasonRay168"},"content":" * @param keyword The keyword that will be compared to the task names","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"JasonRay168"},"content":" * @return The filtered list","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"JasonRay168"},"content":" public ArrayList\u003cTask\u003e filterTaskName(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasksCopied \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"JasonRay168"},"content":" tasksCopied.removeIf(task -\u003e !task.getName().toLowerCase().contains(keyword.toLowerCase()));","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"JasonRay168"},"content":" return tasksCopied;","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"JasonRay168"},"content":" * Overwrites the current list with the list stored in hard drive","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"JasonRay168"},"content":" * @param storage Storage object that points to the stored file","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"JasonRay168"},"content":" storage.overwriteTasksData(this.tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"JasonRay168"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"JasonRay168"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"JasonRay168"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"JasonRay168"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":142}},{"path":"src/main/java/duke/utilities/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Class to declare a Todo task","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of a ToDo task","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" public ToDo(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.TODO, \"\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":15}},{"path":"src/main/java/duke/utilities/Type.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":" * Enum class to declare types of tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"public enum Type {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" TODO,","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" DEADLINE,","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" EVENT;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/duke/utilities/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.EmptyListException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidCommandSyntaxException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidTaskNumberException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidTaskTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.MissingTaskDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.MissingTaskNameException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.MissingTaskNumberException;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" * Handles user interaction","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" /** Variable to show horizontal lines */","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" public static final String LINE_BREAK \u003d (\"--------------------------------------------------\"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" + \"---------------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" /** Variable to detect user input */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * Prints greetings to the user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public void greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"Welcome. My name is Duke\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"What will you do today?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" * Allows users to type in their inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" * @return Input as String","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" public String startInputSession() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" String input \u003d sc.nextLine().trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" return input;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" * Shows the contents of the list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidCommandSyntaxException If there are words after the \"list\" command","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" public void showList(TaskList tasks, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" throws InvalidCommandSyntaxException {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003e 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027list\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" if (tasks.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"List is empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" for (int i \u003d 1; i \u003c tasks.getSize() + 1; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" Task current \u003d tasks.getTask(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" System.out.println(i + \". \" + current.convertToString());","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" * Shows output text when a task is marked, unmarked, or deleted","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" * @param command The first word of the input","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNumberException If the command is not followed by any number","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" * @throws EmptyListException If the list of tasks is empty","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskNumberException If the task number to be manipulated does not exist","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" public void showManipulateTasks(TaskList tasks, String command, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskNumberException, EmptyListException, InvalidTaskNumberException {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNumberException(\"Task number cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" } else if (tasks.getSize() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" throw new EmptyListException(\"List is currently empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"mark\", 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"unmark\", 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"delete\", 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when a todo task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"JasonRay168"},"content":" public void showAddToDo(TaskList tasks, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Todo task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d fullInput.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"JasonRay168"},"content":" tasks.addToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when a deadline task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"JasonRay168"},"content":" * @param parser The parser to parse dates","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNameException If the task name is not specified","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskTimeException If there are missing or more than one deadlines","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"JasonRay168"},"content":" public void showAddDeadline(TaskList tasks, String fullInput, int numberOfWords, Parser parser)","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException, MissingTaskNameException, InvalidTaskTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Deadline task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(9).split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(\"Deadline task must have exactly one /by deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Deadline task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"JasonRay168"},"content":" String strDeadline \u003d taskDesc[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"JasonRay168"},"content":" String deadline \u003d parser.formatDate(strDeadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"JasonRay168"},"content":" if (!deadline.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"JasonRay168"},"content":" tasks.addDeadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when an event task is added","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"JasonRay168"},"content":" * @param parser The parser to parse dates","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If the command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskNameException If the task name is not specified","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskTimeException If there are missing or more than one start or end dates","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"JasonRay168"},"content":" public void showAddEvent(TaskList tasks, String fullInput, int numberOfWords, Parser parser)","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException, MissingTaskNameException, InvalidTaskTimeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Event task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(6).split(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one /from and one /to times, in that order\");","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"JasonRay168"},"content":" String[] fromAndTo \u003d taskDesc[1].split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"JasonRay168"},"content":" if (fromAndTo.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one /from and one /to times, in that order\");","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Event task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"JasonRay168"},"content":" String strStart \u003d fromAndTo[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"JasonRay168"},"content":" String strEnd \u003d fromAndTo[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"JasonRay168"},"content":" String start \u003d parser.formatDate(strStart);","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"JasonRay168"},"content":" if (!start.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"JasonRay168"},"content":" String end \u003d parser.formatDate(strEnd);","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"JasonRay168"},"content":" if (!end.equals(\"Invalid date\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"JasonRay168"},"content":" tasks.addEvent(taskName, start, end);","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":193,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":194,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":195,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":196,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":197,"author":{"gitId":"JasonRay168"},"content":" * Shows text output of the result for searching tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":198,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":199,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":200,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput The full user input","lastModifiedDate":"2023-09-03"},{"lineNumber":201,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"JasonRay168"},"content":" * @throws MissingTaskDescriptionException If command is not followed by any description","lastModifiedDate":"2023-09-03"},{"lineNumber":203,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":204,"author":{"gitId":"JasonRay168"},"content":" public void showFind(TaskList tasks, String fullInput, int numberOfWords)","lastModifiedDate":"2023-09-03"},{"lineNumber":205,"author":{"gitId":"JasonRay168"},"content":" throws MissingTaskDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":206,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003c\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Todo task description cannot be empty\");","lastModifiedDate":"2023-09-02"},{"lineNumber":208,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":209,"author":{"gitId":"JasonRay168"},"content":" String taskToBeFound \u003d fullInput.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":210,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasksFiltered \u003d tasks.filterTaskName(taskToBeFound);","lastModifiedDate":"2023-09-02"},{"lineNumber":211,"author":{"gitId":"JasonRay168"},"content":" int size \u003d tasksFiltered.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":212,"author":{"gitId":"JasonRay168"},"content":" if (size \u003e 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":213,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":214,"author":{"gitId":"JasonRay168"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":215,"author":{"gitId":"JasonRay168"},"content":" System.out.println((i + 1) + \". \" + tasksFiltered.get(i).convertToString());","lastModifiedDate":"2023-09-02"},{"lineNumber":216,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":217,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":218,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are no matching tasks in your list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":219,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":220,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":222,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":223,"author":{"gitId":"JasonRay168"},"content":" * Shows text output when the user exits the chatbot","lastModifiedDate":"2023-09-03"},{"lineNumber":224,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":225,"author":{"gitId":"JasonRay168"},"content":" * @param tasks The list of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":226,"author":{"gitId":"JasonRay168"},"content":" * @param numberOfWords The number of words in the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":227,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidCommandSyntaxException If there are words after the \"bye\" command","lastModifiedDate":"2023-09-03"},{"lineNumber":228,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":229,"author":{"gitId":"JasonRay168"},"content":" public void showBye(TaskList tasks, int numberOfWords)","lastModifiedDate":"2023-09-03"},{"lineNumber":230,"author":{"gitId":"JasonRay168"},"content":" throws InvalidCommandSyntaxException {","lastModifiedDate":"2023-09-03"},{"lineNumber":231,"author":{"gitId":"JasonRay168"},"content":" if (numberOfWords \u003e 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":232,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027bye\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"I hope you enjoy my service. Thank you and goodbye\");","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":237,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":238,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":239,"author":{"gitId":"JasonRay168"},"content":" * Handles the various cases of user inputs","lastModifiedDate":"2023-09-03"},{"lineNumber":240,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":241,"author":{"gitId":"JasonRay168"},"content":" * @param tasks TaskList object that contains the list","lastModifiedDate":"2023-09-03"},{"lineNumber":242,"author":{"gitId":"JasonRay168"},"content":" * @param input Input object that contains parsed user input","lastModifiedDate":"2023-09-03"},{"lineNumber":243,"author":{"gitId":"JasonRay168"},"content":" * @param parser Parser used to parse user inputs","lastModifiedDate":"2023-09-03"},{"lineNumber":244,"author":{"gitId":"JasonRay168"},"content":" * @return True or false signifying breaking or continuing the loop","lastModifiedDate":"2023-09-03"},{"lineNumber":245,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":246,"author":{"gitId":"JasonRay168"},"content":" public boolean handleInput(TaskList tasks, Input input, Parser parser) {","lastModifiedDate":"2023-09-03"},{"lineNumber":247,"author":{"gitId":"JasonRay168"},"content":" boolean endSession \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":248,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":249,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":250,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-09-03"},{"lineNumber":251,"author":{"gitId":"JasonRay168"},"content":" int numberOfWords \u003d input.getLength();","lastModifiedDate":"2023-09-03"},{"lineNumber":252,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-09-03"},{"lineNumber":253,"author":{"gitId":"JasonRay168"},"content":" case \"list\":","lastModifiedDate":"2023-09-03"},{"lineNumber":254,"author":{"gitId":"JasonRay168"},"content":" showList(tasks, fullInput, numberOfWords);","lastModifiedDate":"2023-09-03"},{"lineNumber":255,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":256,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-09-03"},{"lineNumber":257,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-03"},{"lineNumber":258,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-09-03"},{"lineNumber":259,"author":{"gitId":"JasonRay168"},"content":" showManipulateTasks(tasks, command, fullInput, numberOfWords);","lastModifiedDate":"2023-09-03"},{"lineNumber":260,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":261,"author":{"gitId":"JasonRay168"},"content":" case \"todo\":","lastModifiedDate":"2023-09-03"},{"lineNumber":262,"author":{"gitId":"JasonRay168"},"content":" showAddToDo(tasks, fullInput, numberOfWords);","lastModifiedDate":"2023-09-03"},{"lineNumber":263,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":264,"author":{"gitId":"JasonRay168"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-03"},{"lineNumber":265,"author":{"gitId":"JasonRay168"},"content":" showAddDeadline(tasks, fullInput, numberOfWords, parser);","lastModifiedDate":"2023-09-03"},{"lineNumber":266,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":267,"author":{"gitId":"JasonRay168"},"content":" case \"event\":","lastModifiedDate":"2023-09-03"},{"lineNumber":268,"author":{"gitId":"JasonRay168"},"content":" showAddEvent(tasks, fullInput, numberOfWords, parser);","lastModifiedDate":"2023-09-03"},{"lineNumber":269,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":270,"author":{"gitId":"JasonRay168"},"content":" case \"find\":","lastModifiedDate":"2023-09-03"},{"lineNumber":271,"author":{"gitId":"JasonRay168"},"content":" showFind(tasks, fullInput, numberOfWords);","lastModifiedDate":"2023-09-03"},{"lineNumber":272,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":273,"author":{"gitId":"JasonRay168"},"content":" case \"bye\":","lastModifiedDate":"2023-09-03"},{"lineNumber":274,"author":{"gitId":"JasonRay168"},"content":" showBye(tasks, numberOfWords);","lastModifiedDate":"2023-09-03"},{"lineNumber":275,"author":{"gitId":"JasonRay168"},"content":" endSession \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":277,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":278,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandException(\"No such command exists, please try again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"JasonRay168"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":282,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":283,"author":{"gitId":"JasonRay168"},"content":" return endSession;","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":285}},{"path":"src/test/java/duke/utilities/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" private Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" public void test1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"todo eat\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"todo eat\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" public void test2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"event camp /from 2023-03-05 /to 2023-03-06\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 6);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"event camp /from 2023-03-05 /to 2023-03-06\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" public void test3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"hello world, nice to meet you all\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"hello\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 7);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"hello world, nice to meet you all\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" public void test4() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" String formattedDate \u003d parser.formatDate(\"2023-09-03\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" assertEquals(formattedDate, \"Sep 03 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" public void test5() {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" String formattedDate \u003d parser.formatDate(\"August 23, 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" assertEquals(formattedDate, \"Invalid date\");","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":54}},{"path":"src/test/java/duke/utilities/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"public class TaskTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" public void test1() {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" Task task \u003d new Task(\"homework\", Type.DEADLINE, \" (by: Aug 03 2023)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" assertEquals(task.isDone(), true);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" assertEquals(task.isDone(), false);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" String stringRepresentation \u003d task.convertToString();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" assertEquals(\"[D][X] homework (by: Aug 03 2023)\", stringRepresentation);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"blah","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"todo borrow book from the library","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"deadline return book to library /by 2023-04-24","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"deadline submit homework by 2023-04-24","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"event concert /from 2023-03-24 /to 2023-03-26","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"event project meeting /from 2023-04-24 to 2023-04-25","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"event /from 2023-04-24 /to 2023-04-25","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"unmark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"delete 2","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"delete 1","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"todo","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"deadline","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"mark","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"unmark","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"delete","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"mark 100","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"unmark 0","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"delete -3","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":28}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"javac -cp ..\\src\\main\\java\\ -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":19,"JasonRay168":2}},{"path":"tasks.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"JasonRay168":0}}] diff --git a/JasonRay168_ip_master/commits.json b/JasonRay168_ip_master/commits.json index 49b3bc71..6fd368d1 100644 --- a/JasonRay168_ip_master/commits.json +++ b/JasonRay168_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"JasonRay168":[{"date":"2023-08-22","commitResults":[{"hash":"2fe8ea4515a1094286c9c5a82cd5c7ba98199827","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"377800027b5ec44860ab38e8efd1e86217fa7f06","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a6fb4787cebb3ea538d8c9ae6e31eb82df5df261","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":5}}},{"hash":"486510d70b5e8034ca64b595dd88c2a0e738d93c","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":19}}},{"hash":"970ed344a77435ad47f951d56371d5f97474ea8b","isMergeCommit":false,"messageTitle":"Mark and Unmark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":13}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a5061df6df65e8158ec50d49c4b38c954d45f27c","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":210,"deletions":38}}},{"hash":"5add6b7ef4fdd669757e06c57c4f3093791132f5","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0},"java":{"insertions":40,"deletions":59},"bat":{"insertions":1,"deletions":1}}},{"hash":"c50606ec5fe8bf786f0327152d4bebb370e51b0e","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":161,"deletions":120}}},{"hash":"1ecc7db65dbb1f18528eb9c60d86080e0cfd40b5","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1},"java":{"insertions":38,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8482f620556fbff2d483f9a14a4a41c04884004e","isMergeCommit":false,"messageTitle":"Change tabs into spaces and rename the chatbot to Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":369,"deletions":269}}}]},{"date":"2023-08-29","commitResults":[{"hash":"668e58046e898e7b40e1759c76f2bc35fef55959","isMergeCommit":false,"messageTitle":"Store task list in hard drive","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":137}}},{"hash":"e7767b732999af4eec113aebb3418c3993e0c808","isMergeCommit":true,"messageTitle":"Merge branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"7b897aa326b656b314fb8520ea91384cef98d35a","isMergeCommit":false,"messageTitle":"Support date inputs for deadline and event tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"ffd5f30d2773f8ea4a4efae0fdf798004e0c51be","isMergeCommit":true,"messageTitle":"Merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"35226321d59ca43d124a664339bc97bb0edef26f","isMergeCommit":false,"messageTitle":"Separate Duke class main functions to several classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":5},"java":{"insertions":399,"deletions":267},"bat":{"insertions":1,"deletions":1}}},{"hash":"362fb86d5f9d5959d964ef2b6172513d0929e7b3","isMergeCommit":false,"messageTitle":"Create packages for classes","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":5}}}]},{"date":"2023-08-31","commitResults":[{"hash":"4c5fc5096a93c01297208408bb1b6665991bc8a8","isMergeCommit":false,"messageTitle":"Move most error handling from Ui to other classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":185}}},{"hash":"3a2a103ff540e1c904941d9f62d264c5950f841f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc84b11cf8979cf68816fde27cdedeb92e1b9c9f","isMergeCommit":true,"messageTitle":"Merged add-gradle-support branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3db334c8efc4b05b045532a646ab29a30e915fdd","isMergeCommit":false,"messageTitle":"Add gradle support to execute run and build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":43,"deletions":22},"bat":{"insertions":1,"deletions":1}}},{"hash":"fec1c5597fa951f2edb4c3648c0b7f43146d4426","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0}}},{"hash":"70f92ccde23a1b604e23006ae4363cb0fd5387ff","isMergeCommit":true,"messageTitle":"Merge branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"e5e66c5f442c0f4693c8c317169fa21c9bf9f1d0","isMergeCommit":true,"messageTitle":"Merge master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ae2dfe8e770462b0828e7655b67d8a515f53b59a","isMergeCommit":true,"messageTitle":"Merge branch-A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"c608b909c4d3ded24d140ec4583b7ef4b697950f","isMergeCommit":false,"messageTitle":"Fix faulty runtest.bat","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1}}},{"hash":"828e6c4d6f88b2e745781105b9262e76740f7d27","isMergeCommit":false,"messageTitle":"Fix runtest.bat compilation errors and update EXPECTED.TXT","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"f4fabe1b43b61aeb4f2bcd4f8c73c99c07327384","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to java files under duke package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":59}}},{"hash":"cdb035f2d57f24df8173e3dd6802b4eaa192f7aa","isMergeCommit":false,"messageTitle":"Make code follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":59}}},{"hash":"45c1941cc0dd0c68c4686ff3314742b0e82b8b27","isMergeCommit":false,"messageTitle":"Allow users to search for task names by searching for a keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":14}}},{"hash":"58dbf9271eda50713bcd670d9caa0dd982e95cce","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8114c86d978842e73f232eb0765cb30c687a9379","isMergeCommit":true,"messageTitle":"Handle merge conflicts after merging A-JavaDoc and A-CodingStandard branches","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"346452bf22610cc170fb0622d92e127164bd2e29","isMergeCommit":true,"messageTitle":"Handle merge conflicts after merging branch-Level-9","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"4164e13d0fed5bc19774d54a58f773050a04ca3c","isMergeCommit":false,"messageTitle":"Declare multiple helper methods to handle user input in Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":109}}}]}]},"authorFileTypeContributionMap":{"JasonRay168":{"java":1017,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":2,"txt":28}},"authorContributionVariance":{"JasonRay168":74984.06},"authorDisplayNameMap":{"JasonRay168":"CS2103T-W12-1 JASO.. RAY"}} +{"authorDailyContributionsMap":{"JasonRay168":[{"date":"2023-08-22","commitResults":[{"hash":"2fe8ea4515a1094286c9c5a82cd5c7ba98199827","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"377800027b5ec44860ab38e8efd1e86217fa7f06","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a6fb4787cebb3ea538d8c9ae6e31eb82df5df261","isMergeCommit":false,"messageTitle":"Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":5}}},{"hash":"486510d70b5e8034ca64b595dd88c2a0e738d93c","isMergeCommit":false,"messageTitle":"Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":19}}},{"hash":"970ed344a77435ad47f951d56371d5f97474ea8b","isMergeCommit":false,"messageTitle":"Mark and Unmark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":13}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a5061df6df65e8158ec50d49c4b38c954d45f27c","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":210,"deletions":38}}},{"hash":"5add6b7ef4fdd669757e06c57c4f3093791132f5","isMergeCommit":false,"messageTitle":"Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0},"java":{"insertions":40,"deletions":59},"bat":{"insertions":1,"deletions":1}}},{"hash":"c50606ec5fe8bf786f0327152d4bebb370e51b0e","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":161,"deletions":120}}},{"hash":"1ecc7db65dbb1f18528eb9c60d86080e0cfd40b5","isMergeCommit":false,"messageTitle":"Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":1},"java":{"insertions":38,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"8482f620556fbff2d483f9a14a4a41c04884004e","isMergeCommit":false,"messageTitle":"Change tabs into spaces and rename the chatbot to Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":369,"deletions":269}}}]},{"date":"2023-08-29","commitResults":[{"hash":"668e58046e898e7b40e1759c76f2bc35fef55959","isMergeCommit":false,"messageTitle":"Store task list in hard drive","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":191,"deletions":137}}},{"hash":"e7767b732999af4eec113aebb3418c3993e0c808","isMergeCommit":true,"messageTitle":"Merge branch-Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"7b897aa326b656b314fb8520ea91384cef98d35a","isMergeCommit":false,"messageTitle":"Support date inputs for deadline and event tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":4}}},{"hash":"ffd5f30d2773f8ea4a4efae0fdf798004e0c51be","isMergeCommit":true,"messageTitle":"Merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-30","commitResults":[{"hash":"35226321d59ca43d124a664339bc97bb0edef26f","isMergeCommit":false,"messageTitle":"Separate Duke class main functions to several classes","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":5},"java":{"insertions":399,"deletions":267},"bat":{"insertions":1,"deletions":1}}},{"hash":"362fb86d5f9d5959d964ef2b6172513d0929e7b3","isMergeCommit":false,"messageTitle":"Create packages for classes","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":5}}}]},{"date":"2023-08-31","commitResults":[{"hash":"4c5fc5096a93c01297208408bb1b6665991bc8a8","isMergeCommit":false,"messageTitle":"Move most error handling from Ui to other classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":185}}},{"hash":"3a2a103ff540e1c904941d9f62d264c5950f841f","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc84b11cf8979cf68816fde27cdedeb92e1b9c9f","isMergeCommit":true,"messageTitle":"Merged add-gradle-support branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3db334c8efc4b05b045532a646ab29a30e915fdd","isMergeCommit":false,"messageTitle":"Add gradle support to execute run and build","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1},"java":{"insertions":43,"deletions":22},"bat":{"insertions":1,"deletions":1}}},{"hash":"fec1c5597fa951f2edb4c3648c0b7f43146d4426","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0}}},{"hash":"70f92ccde23a1b604e23006ae4363cb0fd5387ff","isMergeCommit":true,"messageTitle":"Merge branch-A-Gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"e5e66c5f442c0f4693c8c317169fa21c9bf9f1d0","isMergeCommit":true,"messageTitle":"Merge master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ae2dfe8e770462b0828e7655b67d8a515f53b59a","isMergeCommit":true,"messageTitle":"Merge branch-A-JUnit","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"c608b909c4d3ded24d140ec4583b7ef4b697950f","isMergeCommit":false,"messageTitle":"Fix faulty runtest.bat","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1}}},{"hash":"828e6c4d6f88b2e745781105b9262e76740f7d27","isMergeCommit":false,"messageTitle":"Fix runtest.bat compilation errors and update EXPECTED.TXT","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-02","commitResults":[{"hash":"f4fabe1b43b61aeb4f2bcd4f8c73c99c07327384","isMergeCommit":false,"messageTitle":"Add JavaDoc comments to java files under duke package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":59}}},{"hash":"cdb035f2d57f24df8173e3dd6802b4eaa192f7aa","isMergeCommit":false,"messageTitle":"Make code follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":59}}},{"hash":"45c1941cc0dd0c68c4686ff3314742b0e82b8b27","isMergeCommit":false,"messageTitle":"Allow users to search for task names by searching for a keyword","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":14}}},{"hash":"58dbf9271eda50713bcd670d9caa0dd982e95cce","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8114c86d978842e73f232eb0765cb30c687a9379","isMergeCommit":true,"messageTitle":"Handle merge conflicts after merging A-JavaDoc and A-CodingStandard branches","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"346452bf22610cc170fb0622d92e127164bd2e29","isMergeCommit":true,"messageTitle":"Handle merge conflicts after merging branch-Level-9","messageBody":"","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"4164e13d0fed5bc19774d54a58f773050a04ca3c","isMergeCommit":false,"messageTitle":"Declare multiple helper methods to handle user input in Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":109}}}]},{"date":"2023-09-04","commitResults":[{"hash":"08f3c479f1188c46e8d44a8a6d72ba08a4e588ae","isMergeCommit":false,"messageTitle":"Fix current checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":108}}},{"hash":"409d1366143b17c22d3886fa85da449141f00a73","isMergeCommit":true,"messageTitle":"Merge branch-A-CheckStyle","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"JasonRay168":{"java":1023,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":2,"txt":28}},"authorContributionVariance":{"JasonRay168":70821.445},"authorDisplayNameMap":{"JasonRay168":"CS2103T-W12-1 JASO.. RAY"}} diff --git a/Kokseng1_ip_master/authorship.json b/Kokseng1_ip_master/authorship.json index 19ed7718..cca4164e 100644 --- a/Kokseng1_ip_master/authorship.json +++ b/Kokseng1_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" final LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" public Deadline(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(9, desc.indexOf(\"/by\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" String byString \u003d desc.substring(desc.indexOf(\"/by\") + 4).replace(\" \", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" this.by \u003d LocalDate.parse(byString);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":22}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" BYE,","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" LIST,","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" MARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" UNMARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" DELETE,","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" EVENT,","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" TODO,","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" DEADLINE","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" public static void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" Ui.printGreeting();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" String inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" TaskType taskType \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" while (taskType !\u003d TaskType.BYE) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" taskList.updateFromStorage(); //load tasks from hard drive if it is available, into taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" case LIST: {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" taskList.printList();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" case MARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getMarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" taskList.markTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getUnmarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" taskList.unmarkTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Parser.parseTask(inputString, taskType);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" taskList.addTask(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" case DELETE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" taskList.deleteTask(Parser.getDeleteIndex(inputString));","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"I can\u0027t identify your command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" taskList.saveList();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" Duke.run();","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kokseng1":70,"-":4}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"class DukeException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":5}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"class Event extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" final LocalDate from;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" final LocalDate to;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public Event(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(6, desc.indexOf(\"/from\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" int fromIndex \u003d desc.indexOf(\"/from\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" int toIndex \u003d desc.indexOf(\"/to\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" String fromString \u003d desc.substring(fromIndex + 6, toIndex).replace(\" \", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" String toString \u003d desc.substring(toIndex + 4).replace(\" \", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" this.from \u003d LocalDate.parse(fromString);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" this.to \u003d LocalDate.parse(toString);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You didn\u0027t enter the event in the correct format!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" return \"[E]\" + super.toString() + \"(from: \" + this.from.format(formatter)","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" + \" to: \" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":34}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public static Integer getDeleteIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" public static Integer getMarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" public static Integer getUnmarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" public static Task parseTask(String text, Duke.TaskType type) throws DukeException, TaskParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" case TODO: {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" return new Todo(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/by\") || text.length() \u003c\u003d text.indexOf(\"/by\") + 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the deadline ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" return new Deadline(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" case EVENT: {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/from\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event starts!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" return new Event(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Not a task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" public static Duke.TaskType parseType(String text) throws DukeException, TaskParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" String[] textParts \u003d text.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" String firstWord \u003d textParts[0].toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" if (textParts.length \u003c\u003d 1 \u0026\u0026 !firstWord.equals(\"list\") \u0026\u0026 !firstWord.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to write the task\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" switch (textParts[0].toLowerCase()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" case \"list\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.LIST;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.MARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.UNMARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" case \"deadline\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DEADLINE;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" case \"event\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.EVENT;","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" case \"todo\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.TODO;","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DELETE;","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" case \"bye\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.BYE;","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" throw new TaskParseException(\"Not a TaskType\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":85}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" static final String FILE_NAME \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" static void checkFileExists() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" Path path \u003d Paths.get(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"data file not found, creating a new one\");","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" Path dirPath \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" Files.createDirectories(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" File file \u003d new File(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" public static void saveTask(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" try (FileWriter fileWriter \u003d new FileWriter(FILE_NAME)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" String text \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"T|\" + done + \"|\" + desc;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" LocalDate from \u003d ((Event) task).from;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" LocalDate to \u003d ((Event) task).to;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"E|\" + done + \"|\" + desc + \"|\" + from + \"|\" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" LocalDate by \u003d ((Deadline) task).by;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"D|\" + done + \"|\" + desc + \"|\" + by;","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" fileWriter.write(text + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" public static ArrayList\u003cTask\u003e loadTasks() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" Scanner sc \u003d new Scanner(new File(FILE_NAME));","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" String next \u003d sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Task.parse(next);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" tasks.add(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":79}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" protected final String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" public Task(boolean done, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" public void mark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task already done\");","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Nice! I\u0027ve marked this task as done:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" public void unmark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task still undone\");","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"OK, I\u0027ve marked this task as not done yet:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" return (\"[\" + this.getStatusIcon() + \"] \" + this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" public static Task parse(String text) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" String[] parts \u003d text.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" String first \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" boolean done \u003d parts[1].equals(\"1\"); // 1 \u003d done, 0 \u003d undone","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" switch (first) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Todo(done, \"todo \" + description);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Event(done, \"event \" + description + \" /from \" + from + \" /to \" + to);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Deadline(done, \"deadline \" + description + \" /by \" + by);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Unable to parse from hard drive\");","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":62}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" public void saveList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" Storage.saveTask(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" public void updateFromStorage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" tasks \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"No tasks found in storage, starting new list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" public void printList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" System.out.println((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Got it. I\u0027ve added this task: \\n\" + task + \"\\nnow you have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public void deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003c\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" } else if (tasks.size() \u003c i) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task index out of range\");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" Task deleted \u003d tasks.remove(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Noted. I\u0027ve removed this task:\\n\" + deleted + \"\\nNow you have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" public void markTask(int i) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).mark();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" public void unmarkTask(int i) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).unmark();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":51}},{"path":"src/main/java/TaskParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"public class TaskParseException extends Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public TaskParseException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Kokseng1":5}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"class Todo extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public Todo(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(5));","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" if (desc.substring(5).isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to enter the task!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":13}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" private static final Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" public static String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" public static void print(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" public static void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" String name \u003d \"Chaty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" + \"What can I do for you?\" + \"\\n\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"todo read book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"todo","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by 2019-12-02","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"deadline return book","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from 2019-12-02 /to 2019-12-03","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"delete 3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Kokseng1":15}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kokseng1":1,"-":20}}] +[{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * main program, responsible for running everything and connecting components together","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * types of task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" BYE,","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" LIST,","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" MARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" UNMARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" DELETE,","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" EVENT,","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" TODO,","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" DEADLINE","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * keeps reading commands and responding accordingly, until command is \"bye\"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" public static void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" Ui.printGreeting();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" String inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" TaskType taskType \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" while (taskType !\u003d TaskType.BYE) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" taskList.updateFromStorage(); //load tasks from hard drive if it is available, into taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" case LIST: {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" taskList.printList();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" case MARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getMarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" taskList.markTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getUnmarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" taskList.unmarkTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Parser.parseTask(inputString, taskType);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" taskList.addTask(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" case DELETE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" taskList.deleteTask(Parser.getDeleteIndex(inputString));","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"I can\u0027t identify your command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" taskList.saveList();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" Duke.run();","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":90,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kokseng1":87,"-":3}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.TaskParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * parser to make sense of user commands, parsing from command to action","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * if command is delete, use this method to get the index of task user wants to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be deleted","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public static Integer getDeleteIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * if command is mark, use this method to get the index of task user wants to mark","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be marked","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" public static Integer getMarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" * if command is unmark, use this method to get the index of task user wants to unmark","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" * @param text original command","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" * @return Integer representing the index of task to be unmarked","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" public static Integer getUnmarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" * given a TaskType, parses a text into a task of that type","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" * @param text original user input","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" * @param type type of task that user specified","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * @return task constructed according to user input","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" public static Task parseTask(String text, Duke.TaskType type) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" case TODO: {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" return new Todo(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/by\") || text.length() \u003c\u003d text.indexOf(\"/by\") + 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the deadline ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" return new Deadline(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" case EVENT: {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/from\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event starts!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" return new Event(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Not a task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" * make sense of what TaskType the user is trying to create from the first word of their input","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * @param text user input","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" * @return TaskType according to user input","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException Some components of the command may be missing for certain tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" * @throws TaskParseException unable to understand what TaskType the user is trying to create","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" public static Duke.TaskType parseType(String text) throws DukeException, TaskParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" String[] textParts \u003d text.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" String firstWord \u003d textParts[0].toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" if (textParts.length \u003c\u003d 1 \u0026\u0026 !firstWord.equals(\"list\") \u0026\u0026 !firstWord.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to write the task\");","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" switch (textParts[0].toLowerCase()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" case \"list\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.LIST;","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.MARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.UNMARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" case \"deadline\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DEADLINE;","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" case \"event\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.EVENT;","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" case \"todo\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.TODO;","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DELETE;","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" case \"bye\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.BYE;","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Kokseng1"},"content":" throw new TaskParseException(\"Not a TaskType\");","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":125}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * Saves and loads tasks to hard drive in String form","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * name of file and path which the data is to be stored","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" static final String FILE_NAME \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" * check if file that is to be written to and loaded from exists, if","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * it does not, create one","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" static void checkFileExists() {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" Path path \u003d Paths.get(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"data file not found, creating a new one\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" Path dirPath \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" Files.createDirectories(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" File file \u003d new File(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * wipes file and save tasks given in param to hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" * @param tasks ArrayList of tasks to be saved","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public static void saveTask(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" try (FileWriter fileWriter \u003d new FileWriter(FILE_NAME)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" String text \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"T|\" + done + \"|\" + desc;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" LocalDate from \u003d ((Event) task).getFrom();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" LocalDate to \u003d ((Event) task).getTo();","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"E|\" + done + \"|\" + desc + \"|\" + from + \"|\" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.getisDone()","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.getDescription();","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" LocalDate by \u003d ((Deadline) task).getBy();","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"D|\" + done + \"|\" + desc + \"|\" + by;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" fileWriter.write(text + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" * loads task from hard drive and returns it","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * @return ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" public static ArrayList\u003cTask\u003e loadTasks() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" Scanner sc \u003d new Scanner(new File(FILE_NAME));","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" String next \u003d sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Task.parse(next);","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" tasks.add(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks\");","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":104}},{"path":"src/main/java/duke/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * contains the list of tasks, and provides methods to edit the list and interact with storage/hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * ArrayList of tasks","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" * constructor","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public TaskList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * saves current tasks to hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" public void saveList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" Storage.saveTask(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * loads tasks from hard drive into tasks, prints a message if there","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * are no tasks found","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public void updateFromStorage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" tasks \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"No tasks found in storage, starting new list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" * prints the list of task in their string format,","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" * each task starts on a new line","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if there are no tasks in the list","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" public void printList() throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks yet\");","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" Ui.print((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" * add a task to the current list","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" * @param task task to be added","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Got it. I\u0027ve added this task: \\n\" + task + \"\\nnow you have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * deletes a task from the list","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be deleted","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if index is out of range or there are no tasks to delete","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" public void deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003c\u003d 0) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" } else if (tasks.size() \u003c i) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task.Task index out of range\");","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" Task deleted \u003d tasks.remove(i);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Noted. I\u0027ve removed this task:\\n\" + deleted + \"\\nNow you have \"","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" * marks a task at an index as done","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task to be marked as done","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" public void markTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).mark();","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" * unmarks task at an index as undone","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" * @param i index of task which is to be marked undone","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" public void unmarkTask(int i) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).unmark();","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":98}},{"path":"src/main/java/duke/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" * responsible for printing messages and recieving commands","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * scanner to read input","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" private static final Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * read and returns command","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * @return String of user input","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" public static String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * prints a message to the user","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * @param message String message to be printed","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" public static void print(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * greeting to be printed at start of program","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public static void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" String name \u003d \"Chaty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" + \"What can I do for you?\" + \"\\n\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":39}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" * Represents a Duke exclusive error, not including parsing between String and Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * public onstructor, returns a \u003ccode\u003eDukeException\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * @param message message that is to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":14}},{"path":"src/main/java/duke/exceptions/TaskParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.exceptions;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" * Represents a parsing error between String and Task","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"public class TaskParseException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * public onstructor, returns a \u003ccode\u003eTaskParseException\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" * @param message message that is to be displayed","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public TaskParseException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":14}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task of Deadline type, has a \u003ccode\u003eby\u003c/code\u003e that indicates when the task should be done","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * by. \u003ccode\u003eby\u003c/code\u003e is stored in \u003ccode\u003eLocalDate\u003c/code\u003e format.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * indicates when the task should be done","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate by;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * Constructor, returns a \u003ccode\u003eDeadline\u003c/code\u003e instance","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done or not","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * @param desc description or name of the task, and when the task must be done by, in","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * \"YYYY-MM-DD\" format","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException error if incorrect format is used for by date and is unable to be parsed","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public Deadline(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(9, desc.indexOf(\"/by\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" String byString \u003d desc.substring(desc.indexOf(\"/by\") + 4).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" this.by \u003d LocalDate.parse(byString);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" * getter for \u003ccode\u003eby\u003c/code\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate by","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getBy() {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" return this.by;","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" * String representation of Deadline, including task type, if task is done, by date and task name","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * @return String representation of Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":53}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task of Event type, has a \u003ccode\u003eto\u003c/code\u003e and \u003ccode\u003efrom\u003c/code\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eto\u003c/code\u003e and \u003ccode\u003efrom\u003c/code\u003e is stored in \u003ccode\u003eLocalDate\u003c/code\u003e format.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" * when the event starts","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate from;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" * when the event ends","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" private final LocalDate to;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" * constructor for Event, returns an Event","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the event is done or over","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" * @param desc name of the event, when is it from, indicated by /from and when is it to","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" * , indicated by \u003ccode\u003eto\u003c/code\u003e. Both must be in YYYY-MM-DD format","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException throws an error if the date is unable to be parsed, likely due","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" * to wrong format","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" public Event(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(6, desc.indexOf(\"/from\")));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" int fromIndex \u003d desc.indexOf(\"/from\");","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" int toIndex \u003d desc.indexOf(\"/to\");","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" String fromString \u003d desc.substring(fromIndex + 6, toIndex).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" String toString \u003d desc.substring(toIndex + 4).replace(\" \", \"\");","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" this.from \u003d LocalDate.parse(fromString);","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" this.to \u003d LocalDate.parse(toString);","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You didn\u0027t enter the event in the correct format!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" * getter for from date","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate from","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getFrom() {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" return this.from;","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" * getter for to date","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * @return LocalDate to","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" public LocalDate getTo() {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" return this.to;","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" * String representation of Event, including task type, if task is done, from and to date, and task name","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" * @return String representation of Deadline","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" return \"[E]\" + super.toString() + \"(from: \" + this.from.format(formatter)","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" + \" to: \" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":73}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" * Represents a Task, a supertype of Event, Deadline and Todo","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" * \u003ccode\u003eisDone\u003c/code\u003e shows whether the task is completed","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" private final String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" * whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" private boolean isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" * constructor, should not be used because this is an abstract class. For initialising description","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" * and isDone only","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * @param description name of task","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" public Task(boolean done, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" * getter for boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" * @return boolean isDone","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" public boolean getisDone() {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" return this.isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" * getter for descriptions","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" * @return","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" return this.description;","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" * marks the task as done, if it is undone","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is already done","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" public void mark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task already done\");","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Nice! I\u0027ve marked this task as done:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" * unmarks the task as undone, if it is done","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if task is still undone","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" public void unmark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task still undone\");","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"OK, I\u0027ve marked this task as not done yet:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" * get String representation of whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" * @return \u003ccode\u003e\"X\"\u003c/code\u003e for done, \" \" for undone","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" * String representation of task, including whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of task","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" return (\"[\" + this.getStatusIcon() + \"] \" + this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" * converts hard drive\u0027s String format of a task into an actual task item","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" * @param text String from hard drive","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" * @return task item","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException if string cannot be recognised and cannot be parsed into a task","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" public static Task parse(String text) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" String[] parts \u003d text.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" String first \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" boolean done \u003d parts[1].equals(\"1\"); // 1 \u003d done, 0 \u003d undone","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"Kokseng1"},"content":" switch (first) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"Kokseng1"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Todo(done, \"todo \" + description);","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"Kokseng1"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"Kokseng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"Kokseng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Event(done, \"event \" + description + \" /from \" + from + \" /to \" + to);","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"Kokseng1"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"Kokseng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Deadline(done, \"deadline \" + description + \" /by \" + by);","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Kokseng1"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Unable to parse from hard drive\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"Kokseng1"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":118}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import duke.exceptions.DukeException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" * Represents a task of Todo type","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" * constructor, returns a todo instance","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" * @param done whether the task is done","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" * @param desc name of the task","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" * @throws DukeException","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" public Todo(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(5));","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" if (desc.substring(5).isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to enter the task!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" * String representation of item, including indication of tasktype (todo)","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" * @return string representation of todo","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"Kokseng1":30}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"todo read book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"todo","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by 2019-12-02","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"deadline return book","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from 2019-12-02 /to 2019-12-03","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"delete 3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Kokseng1":15}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java*.java","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kokseng1":2,"-":19}}] diff --git a/Kokseng1_ip_master/commits.json b/Kokseng1_ip_master/commits.json index 7f1dfc1c..2ca3882f 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}}}]}]},"authorFileTypeContributionMap":{"Kokseng1":{"java":446,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":15}},"authorContributionVariance":{"Kokseng1":18408.336},"authorDisplayNameMap":{"Kokseng1":"CS2103T-W13-1 NG K..SENG"}} +{"authorDailyContributionsMap":{"Kokseng1":[{"date":"2023-08-23","commitResults":[{"hash":"5437d9a251d312b0c589135871c0925aad4ed482","isMergeCommit":false,"messageTitle":"lvl0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5e8695955e97d167b6ad020761fd92a88503a944","isMergeCommit":false,"messageTitle":"lvl1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"5e7db755627af945303b5a36167afa5402cac3f8","isMergeCommit":false,"messageTitle":"lvl2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"e6ea6dc8966cda93d1c27acea70d7e3a4296c4e0","isMergeCommit":false,"messageTitle":"lvl3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":4}}},{"hash":"b8beb55918337818df99ebb1c29c19480a822b7b","isMergeCommit":false,"messageTitle":"lvl4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":4}}},{"hash":"83b988fb28add0a26169e11c33267a66fe644c11","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"ef2a2e6dbb28c8ac310224790069914f7c80748d","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3ee355ea6900f7dbd9e475a6393ff08c54f3b186","isMergeCommit":false,"messageTitle":"lvl6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":33,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2bc16fc54b63c437edbe68306a3217788a995eaa","isMergeCommit":false,"messageTitle":"add taskfile","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":134},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"8b1fd67baa65d3eb7421d9c5d16126331a3af11a","isMergeCommit":false,"messageTitle":"lvl 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":24}}},{"hash":"07c02e8afd9cda034bcf72489f7b785cdd91b6f7","isMergeCommit":false,"messageTitle":"change if else statement to switch in Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":58}}},{"hash":"e199ebc6ec21b2b212ff5631c16d22b49917c780","isMergeCommit":false,"messageTitle":"lvl 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":18}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0a721863d7afb1018a6870f03021a1a8fd4f6cb8","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":10},"java":{"insertions":272,"deletions":130}}}]},{"date":"2023-09-04","commitResults":[{"hash":"9cab895397e0a23e34a0f01843414cbd2ef313cd","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":457,"deletions":149},"bat":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Kokseng1":{"java":755,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":0,"txt":15}},"authorContributionVariance":{"Kokseng1":32186.459},"authorDisplayNameMap":{"Kokseng1":"CS2103T-W13-1 NG K..SENG"}} diff --git a/LuahJunYang_ip_master/authorship.json b/LuahJunYang_ip_master/authorship.json index 7c015ee9..ba900a7c 100644 --- a/LuahJunYang_ip_master/authorship.json +++ b/LuahJunYang_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" String deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":" //Constructor","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" super(name);","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":" return \"[D]\" + super.toString() + \"(\" + this.deadline + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":17}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" String startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" String endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Event(String name, String startTime, String endTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" return \"[E]\" + super.toString() + \"(\" + this.startTime + this.endTime + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":16}},{"path":"src/main/java/Frenchie.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":"public class Frenchie {","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" public List\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" //constructor","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" public Frenchie() {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":" public void addTask(Task NEW_TASK) {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" tasks.add(NEW_TASK);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"LuahJunYang"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"LuahJunYang"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(counter + \". \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"LuahJunYang"},"content":" counter +\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"LuahJunYang"},"content":" public void completeTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"LuahJunYang"},"content":" tasks.get(index).mark_as_completed();","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"LuahJunYang"},"content":" public void uncompleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"LuahJunYang"},"content":" tasks.get(index).mark_as_incomplete();","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"LuahJunYang"},"content":" public int getNumOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"LuahJunYang"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"LuahJunYang"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"LuahJunYang"},"content":" /*String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"LuahJunYang"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"LuahJunYang"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"LuahJunYang"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"LuahJunYang"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"Hello from\\n\" + logo); */","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"LuahJunYang"},"content":" Frenchie frenchie \u003d new Frenchie();","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"LuahJunYang"},"content":" String skeleton \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"LuahJunYang"},"content":" \" Hello! I\u0027m Frenchie\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"LuahJunYang"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"LuahJunYang"},"content":" /* \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\\n\" */;","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(skeleton);","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"LuahJunYang"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"LuahJunYang"},"content":" while (true) {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"LuahJunYang"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"LuahJunYang"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"LuahJunYang"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"LuahJunYang"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.equals(\"list\")) { //Checking if user is looking to list all tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"LuahJunYang"},"content":" frenchie.listTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.contains(\"mark\")) { //Checking if user input is to mark/unmark tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"LuahJunYang"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"LuahJunYang"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"LuahJunYang"},"content":" Task target_task \u003d frenchie.tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"LuahJunYang"},"content":" //Checking if user is looking to mark task as done or incomplete","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"LuahJunYang"},"content":" if (parts[0].equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"LuahJunYang"},"content":" frenchie.completeTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"LuahJunYang"},"content":" \" Nice! I\u0027ve marked this task as done: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"LuahJunYang"},"content":" target_task.toString() + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"LuahJunYang"},"content":" frenchie.uncompleteTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"LuahJunYang"},"content":" \" OK, I\u0027ve marked this task as not done yet: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"LuahJunYang"},"content":" target_task.toString() + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"LuahJunYang"},"content":" if (input.contains(\"event\") || input.contains(\"todo\") || input.contains(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"LuahJunYang"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"LuahJunYang"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"LuahJunYang"},"content":" if (taskType.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"todo\")[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"LuahJunYang"},"content":" ToDo currentTask \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"LuahJunYang"},"content":" } else if (taskType.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"/\")[0].split(\"deadline\")[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"LuahJunYang"},"content":" String deadline \u003d input.split(\"/\")[1].replace(\"by \", \"by: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"LuahJunYang"},"content":" Deadline currentTask \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"/\")[0].split(\"event\")[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"LuahJunYang"},"content":" String startTime \u003d input.split(\"/\")[1].replace(\"from \", \"from: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"LuahJunYang"},"content":" String endTime \u003d input.split(\"/\")[2].replace(\"to \", \"to: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"LuahJunYang"},"content":" Event currentTask \u003d new Event(taskName, startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"LuahJunYang"},"content":" ToDo currentTask \u003d new ToDo(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LuahJunYang":126}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" public boolean isCompleted;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" public String task_name;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Task() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" //Constructor","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" public void mark_as_completed() {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LuahJunYang"},"content":" public void mark_as_incomplete() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LuahJunYang"},"content":" String indicator \u003d \" \";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"LuahJunYang"},"content":" if(isCompleted) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"LuahJunYang"},"content":" indicator \u003d \"X\";","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"LuahJunYang"},"content":" return \"[\" + indicator + \"] \" + task_name;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LuahJunYang":29}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"class ToDo extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" ToDo(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":11}}] +[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" String deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":" //Constructor","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" super(name);","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":" return \"[D]\" + super.toString() + \"(\" + this.deadline + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":17}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" String startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" String endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Event(String name, String startTime, String endTime) {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" return \"[E]\" + super.toString() + \"(\" + this.startTime + this.endTime + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":16}},{"path":"src/main/java/Frenchie.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"public class Frenchie {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" //constructor","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" public Frenchie() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" public void addTask(Task NEW_TASK) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":" tasks.add(NEW_TASK);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"LuahJunYang"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(counter + \". \" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"LuahJunYang"},"content":" counter +\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"LuahJunYang"},"content":" public void completeTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"LuahJunYang"},"content":" tasks.get(index).mark_as_completed();","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"LuahJunYang"},"content":" public void uncompleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"LuahJunYang"},"content":" tasks.get(index).mark_as_incomplete();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"LuahJunYang"},"content":" public int getNumOfTasks() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"LuahJunYang"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"LuahJunYang"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"LuahJunYang"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"LuahJunYang"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"LuahJunYang"},"content":" /*String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"LuahJunYang"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"LuahJunYang"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"LuahJunYang"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"LuahJunYang"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"Hello from\\n\" + logo); */","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"LuahJunYang"},"content":" Frenchie frenchie \u003d new Frenchie();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"LuahJunYang"},"content":" String skeleton \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"LuahJunYang"},"content":" \" Hello! I\u0027m Frenchie\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"LuahJunYang"},"content":" \" What can I do for you?\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"LuahJunYang"},"content":" /* \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\\n\" */;","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(skeleton);","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"LuahJunYang"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"LuahJunYang"},"content":" while (true) {","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"LuahJunYang"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"LuahJunYang"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"LuahJunYang"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"LuahJunYang"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"LuahJunYang"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.equals(\"list\")) { //Checking if user is looking to list all tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"LuahJunYang"},"content":" frenchie.listTasks();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.contains(\"mark\")) { //Checking if user input is to mark/unmark tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"LuahJunYang"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"LuahJunYang"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"LuahJunYang"},"content":" Task target_task \u003d frenchie.tasks.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"LuahJunYang"},"content":" //Checking if user is looking to mark task as done or incomplete","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"LuahJunYang"},"content":" if (parts[0].equals(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"LuahJunYang"},"content":" frenchie.completeTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"LuahJunYang"},"content":" \" Nice! I\u0027ve marked this task as done: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"LuahJunYang"},"content":" target_task.toString() + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"LuahJunYang"},"content":" frenchie.uncompleteTask(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"LuahJunYang"},"content":" \" OK, I\u0027ve marked this task as not done yet: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"LuahJunYang"},"content":" target_task.toString() + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.contains(\"delete\")){","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"LuahJunYang"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"LuahJunYang"},"content":" int index \u003d Integer.parseInt(parts[1]) - 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"LuahJunYang"},"content":" Task target_task \u003d frenchie.tasks.get(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"LuahJunYang"},"content":" frenchie.deleteTask(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"LuahJunYang"},"content":" \"Noted. I\u0027ve removed this task: \\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"LuahJunYang"},"content":" target_task.toString() + \"\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"LuahJunYang"},"content":" } else if (input.contains(\"event\") || input.contains(\"todo\") || input.contains(\"deadline\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"LuahJunYang"},"content":" String[] parts \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"LuahJunYang"},"content":" String taskType \u003d parts[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"LuahJunYang"},"content":" if (parts.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"LuahJunYang"},"content":" throw new FrenchieException(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"LuahJunYang"},"content":" \"OOPS!!! The description of a \" + taskType + \" cannot be empty.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"LuahJunYang"},"content":" if (taskType.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"todo\")[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"LuahJunYang"},"content":" ToDo currentTask \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"LuahJunYang"},"content":" } else if (taskType.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"/\")[0].split(\"deadline\")[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"LuahJunYang"},"content":" String deadline \u003d input.split(\"/\")[1].replace(\"by \", \"by: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"LuahJunYang"},"content":" Deadline currentTask \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"LuahJunYang"},"content":" String taskName \u003d input.split(\"/\")[0].split(\"event\")[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"LuahJunYang"},"content":" String startTime \u003d input.split(\"/\")[1].replace(\"from \", \"from: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"LuahJunYang"},"content":" String endTime \u003d input.split(\"/\")[2].replace(\"to \", \"to: \");","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"LuahJunYang"},"content":" Event currentTask \u003d new Event(taskName, startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"LuahJunYang"},"content":" frenchie.addTask(currentTask);","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"LuahJunYang"},"content":" System.out.println(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"LuahJunYang"},"content":" \" Got it! I\u0027ve added this task: \\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"LuahJunYang"},"content":" currentTask + \"\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"LuahJunYang"},"content":" \"Now you have \" + frenchie.getNumOfTasks() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"LuahJunYang"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"LuahJunYang"},"content":" throw new FrenchieException(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"LuahJunYang"},"content":" \"OOPS!!! I\u0027m sorry but I don\u0027t know what that means! :-(\\n\" +","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"LuahJunYang"},"content":" \"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"LuahJunYang"},"content":" } catch (FrenchieException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"LuahJunYang"},"content":" System.err.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LuahJunYang":144}},{"path":"src/main/java/FrenchieException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class FrenchieException extends Exception{","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" public FrenchieException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"LuahJunYang":5}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"public class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":" public boolean isCompleted;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" public String task_name;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" public Task() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" //Constructor","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"LuahJunYang"},"content":" public void mark_as_completed() {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"LuahJunYang"},"content":" public void mark_as_incomplete() {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"LuahJunYang"},"content":" isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"LuahJunYang"},"content":" String indicator \u003d \" \";","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"LuahJunYang"},"content":" if(isCompleted) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"LuahJunYang"},"content":" indicator \u003d \"X\";","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"LuahJunYang"},"content":" return \"[\" + indicator + \"] \" + task_name;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"LuahJunYang":29}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LuahJunYang"},"content":"class ToDo extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"LuahJunYang"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"LuahJunYang"},"content":" ToDo(String name) {","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"LuahJunYang"},"content":" this.task_name \u003d name;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"LuahJunYang"},"content":" this.isCompleted \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"LuahJunYang"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"LuahJunYang"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"LuahJunYang"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"LuahJunYang"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"LuahJunYang"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"LuahJunYang":11}}] diff --git a/LuahJunYang_ip_master/commits.json b/LuahJunYang_ip_master/commits.json index 83a7e420..1eaadc47 100644 --- a/LuahJunYang_ip_master/commits.json +++ b/LuahJunYang_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"LuahJunYang":[{"date":"2023-08-26","commitResults":[{"hash":"8f211eb8e87a26c3760bb2e196978ddb28e49a1b","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":2}}},{"hash":"c442a23dac6e168b3f849fee939b3e8f6a801e3d","isMergeCommit":false,"messageTitle":"Finished Level 1, renamed bot to Frenchie","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":17}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e26ad607487e0c4912cae93e854a7bdc74db8cce","isMergeCommit":false,"messageTitle":"Added functionality to store user input as list and print out all input text when \u0027list\u0027 is input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"2826c8ba9b7959c51d17dcd54e8d4a28c4c1442e","isMergeCommit":false,"messageTitle":"Created Task class to be used for Frenchie","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c163e3fda3294c9ee88eb5dd295e8e3dae9575b2","isMergeCommit":false,"messageTitle":"Added addTask and listTask methods and a constructor to Frenchie.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":10}}},{"hash":"6880516e595a567b30466e6bcebdbc8f5ed30d95","isMergeCommit":false,"messageTitle":"Added mark as incomplete method to Task.java and complete and uncomplete method to Frenchie.java, level 3 completed","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":5}}},{"hash":"950238093903e27becc206e067c655bf5e72db58","isMergeCommit":false,"messageTitle":"Created new Task subclasses","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"6403c3d3ec26297bb870de196486ff8a00bcc35f","isMergeCommit":false,"messageTitle":" Added if-else statements and updated toString() methods for checking for todo, event, deadline. Level 4 Complete.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":30}}}]}]},"authorFileTypeContributionMap":{"LuahJunYang":{"java":199,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":0}},"authorContributionVariance":{"LuahJunYang":3800.8994},"authorDisplayNameMap":{"LuahJunYang":"CS2103-W14-1 LUAH..YANG"}} +{"authorDailyContributionsMap":{"LuahJunYang":[{"date":"2023-08-26","commitResults":[{"hash":"8f211eb8e87a26c3760bb2e196978ddb28e49a1b","isMergeCommit":false,"messageTitle":"Level 0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":2}}},{"hash":"c442a23dac6e168b3f849fee939b3e8f6a801e3d","isMergeCommit":false,"messageTitle":"Finished Level 1, renamed bot to Frenchie","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":17}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e26ad607487e0c4912cae93e854a7bdc74db8cce","isMergeCommit":false,"messageTitle":"Added functionality to store user input as list and print out all input text when \u0027list\u0027 is input","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}},{"hash":"2826c8ba9b7959c51d17dcd54e8d4a28c4c1442e","isMergeCommit":false,"messageTitle":"Created Task class to be used for Frenchie","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"c163e3fda3294c9ee88eb5dd295e8e3dae9575b2","isMergeCommit":false,"messageTitle":"Added addTask and listTask methods and a constructor to Frenchie.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":10}}},{"hash":"6880516e595a567b30466e6bcebdbc8f5ed30d95","isMergeCommit":false,"messageTitle":"Added mark as incomplete method to Task.java and complete and uncomplete method to Frenchie.java, level 3 completed","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":5}}},{"hash":"950238093903e27becc206e067c655bf5e72db58","isMergeCommit":false,"messageTitle":"Created new Task subclasses","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"6403c3d3ec26297bb870de196486ff8a00bcc35f","isMergeCommit":false,"messageTitle":" Added if-else statements and updated toString() methods for checking for todo, event, deadline. Level 4 Complete.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":30}}}]},{"date":"2023-09-04","commitResults":[{"hash":"f8faf33712ccd821b29c334ab761a08501de53c8","isMergeCommit":false,"messageTitle":"Created new FrenchieException class to handle basic exceptions for now. Level 5 completed up till basic exceptions.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":60}}},{"hash":"59151ce9f8347bca060c122d8040fc9380cde53c","isMergeCommit":false,"messageTitle":"Added delete function to frenchie, changed tasks attribute to ArrayList instead of List","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"LuahJunYang":{"java":222,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":0}},"authorContributionVariance":{"LuahJunYang":3709.654},"authorDisplayNameMap":{"LuahJunYang":"CS2103-W14-1 LUAH..YANG"}} diff --git a/McNaBry_ip_master/authorship.json b/McNaBry_ip_master/authorship.json index a1019a1a..11656c5f 100644 --- a/McNaBry_ip_master/authorship.json +++ b/McNaBry_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":"McNaBry"},"content":" //id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"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":"McNaBry"},"content":"//checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"// toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"//}","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"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":"McNaBry"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"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":{"McNaBry":7,"-":41}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" * The Command abstract class.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * Represents the logic that is to be executed","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * for the respective user command.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" public abstract void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) throws DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":21}},{"path":"src/main/java/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * The DeadlineCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" * Handles creating a new {@link Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the DeadlineCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * Takes in the description and date for a {@link Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" * @param deadline The date of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" public DeadlineCommand(String description,","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" LocalDateTime deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" public void execute(TaskList tasks,","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" Storage storage,","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" Task dl \u003d new Deadline(description, deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" tasks.add(dl);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" \"Okie! I\u0027ve added a new \" + Ui.cTxt(\"DEADLINE\", Ui.Color.BLUE) + \":\",","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" \" \" + dl.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" \"Total no. of tasks stored: \" + tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":46}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * The DeleteCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * Handles deleting a {@link Task} from {@link TaskList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" private int taskIndex;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" * The constructor method for a DeleteCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" * Takes in the index of the task to be deleted from {@link TaskList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when the taskIndex given","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * cannot be converted to a number.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" public DeleteCommand(String taskIndex) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" this.taskIndex \u003d Integer.parseInt(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"delete\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" + \" takes in a number. Try delete 1.\"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" Task removedTask \u003d tasks.delete(taskIndex - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" \"Okie! I\u0027ve deleted task \" + taskIndex + \":\",","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" \" \" + removedTask.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" \"Total no. of tasks stored: \" + tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" // Write modified task list to file","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":48}},{"path":"src/main/java/commands/EmptyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" * The EmptyCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * Returned by {@link Parser} when no command is given.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"public class EmptyCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":18}},{"path":"src/main/java/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * The EventCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" * Handles creating a new {@link Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the EventCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * Takes in the description and the two dates of an {@link Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" * @param description The description of an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" * @param from The start date of an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" * @param to The end date of an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" public EventCommand(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" Task event \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" \"Okie! I\u0027ve added a new \" + Ui.cTxt(\"EVENT\", Ui.Color.YELLOW) + \":\",","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" \" \" + event.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" \"Total no. of tasks stored: \" + tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":47}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" * The ExitCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" * Handles the exit logic when the user enters the exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" ui.displayGoodbye();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":23}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * The FindCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * Finds the list of tasks containing a given keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" private String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the FindCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * Takes in a keyword (can be one or multiple) that","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * will be used to find a list of tasks containing it.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * @param keyword The keyword to be used to find","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * a list of tasks that contains it.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" ArrayList\u003cTask\u003e result \u003d tasks.findTasks(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" int count \u003d result.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(\"Nothing found with keyword: \" + Ui.cTxt(keyword, Ui.Color.YELLOW));","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" String[] displayArr \u003d new String[result.size() + 1];","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" displayArr[0] \u003d \"I\u0027ve found \" ","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(String.valueOf(count), Ui.Color.YELLOW)","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" + \" task(s) that matches the keyword: \" ","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(keyword, Ui.Color.YELLOW);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" for (int i \u003d 1; i \u003c result.size() + 1; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" displayArr[i] \u003d \" \" + result.get(i - 1).toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(displayArr);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"McNaBry":51}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" * The ListCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" * Handles the display of the entire list of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * stored in {@link TaskList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(\"Nothing stored.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" String[] formatTasks \u003d new String[tasks.getSize() + 1];","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" formatTasks[0] \u003d \"Here are the tasks in your list:\";","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" formatTasks[i + 1] \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" \"%d.%s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" i + 1, tasks.getTask(i).toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(formatTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":32}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * The MarkCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * Handles marking/unmarking a {@link Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" private int taskCount;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the MarkCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * Takes in the index of the {@link Task} and a boolean","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * indicating whether it is to be marked/unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * @param taskCount The index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * @param isDone Indicates whether the task is to be marked/unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when the taskCount given","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" * cannot be converted to a number.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" public MarkCommand(String taskCount, boolean isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" this.taskCount \u003d Integer.parseInt(taskCount);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt((isDone ? \"mark\" : \"unmark\"), Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" + \" takes in a number. Try \"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(\"mark\", Ui.Color.PURPLE) + \" 1.\"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" // User tries to mark/unmark a task that is out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" if (taskCount \u003c 1 || taskCount \u003e tasks.getSize()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" \"Unable to %s task %d :( You have %d task(s) stored.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" isDone ? \"mark\" : \"unmark\", taskCount, tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" ));","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" // Mark or unmark the task if the taskCount given is correct.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" Task task \u003d tasks.mark(taskCount - 1, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" String success \u003d isDone","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" ? \"Nice, I\u0027ve marked this task as done:\"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" : \"Okie, I\u0027ve marked this task as not done yet:\";","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[]{","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" success,","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" \" \" + task.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":65}},{"path":"src/main/java/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * The TodoCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * Handles creating a new {@link Todo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the TodoCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * Takes in a description of a {@link Todo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * @param description The description of a todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" Task todo \u003d new Todo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" \"Okie! I\u0027ve added a new \" + Ui.cTxt(\"TODO\", Ui.Color.GREEN) + \":\",","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" \" \" + todo.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" \"Total no. of tasks stored: \" + tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":39}},{"path":"src/main/java/common/DateParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package common;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import java.time.temporal.ChronoField;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * The DateParser class.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * Handles parsing date strings to {@link LocalDateTime}","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" * and displaying {@link LocalDateTime} as \"MMM dd yyyy h:mma\".","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" * Example: Aug 10 2023 6:00PM.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"public class DateParser {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * The {@link DateTimeFormatter} used to parse","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * date strings into {@link LocalDateTime}.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" private static final DateTimeFormatter parseFormat \u003d ","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" new DateTimeFormatterBuilder()","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" .append(DateTimeFormatter.ofPattern(","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" \"[d/M/yyyy]\"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" + \"[yyyy/M/d]\"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" + \"[d-M-yyyy]\"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" + \"[yyyy-M-d]\"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" ))","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" .append(DateTimeFormatter.ofPattern(","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" \"[d MMM yyyy]\" + \"[MMM d yyyy]\",","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" Locale.ENGLISH","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" ))","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" .optionalStart()","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" .appendPattern(\"[ HHmm][ Hmm][\u0027T\u0027HH:mm]\")","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" .optionalEnd()","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" .toFormatter();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" * The {@link DateTimeFormatter} used to display","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" * {@link LocalDateTime} as a string.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" private static final DateTimeFormatter displayFormat \u003d ","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" DateTimeFormatter.ofPattern(","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" \"MMM dd yyyy h:mma\",","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" Locale.ENGLISH","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" * Parses the string given into a {@link LocalDateTime}.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" * @param date The date string to be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" * @return A {@link LocalDateTime} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" public static LocalDateTime parseDateString(String date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" return LocalDateTime.parse(date, parseFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" * Gets the string representation of the given {@link LocalDateTime}","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" * and converts it into the format displayed by Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" * @param date The {@link LocalDateTime} to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" * @return The display string of the date given.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" public static String toDisplayString(LocalDateTime date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" return date.format(displayFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" * Gets the string representation of the given {@link LocalDateTime}","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" * and converts it into the format that {@link Storage} uses to","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" * write to a persistent file.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" * @param date The {@link LocalDateTime} to be stored on the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" * @return A string that can be written to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" public static String toFileString(LocalDateTime date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" return date.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"McNaBry":88}},{"path":"src/main/java/data/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * The TaskList class.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * Manages the list of tasks that the user has created.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the TaskList class.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * @param tasks An ArrayList if there are existing tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * else null can be passed in to instantiate","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * an empty TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" if (tasks !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" this.tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" * Checks if the TaskList contains no tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" * @return A boolean indicating whether the ","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" * TaskList is empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" return this.tasks.size() \u003d\u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" * Retrieves the number of tasks stored in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" * @return An integer indicating the number of tasks stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" * Retrieves the {@link Task} corresponding to the taskIndex.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" * Starts from 0.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" * @param taskIndex The index of the task stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" * @return The task stored at the given index.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" return this.tasks.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" * Appends the given {@link Task} to the list of stored tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" * @param task The task to be stored in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" * Marks/unmarks the {@link Task} at the given taskIndex","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" * depending on isDone.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" * @param taskIndex The index of the task stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" * @param isDone Whether the task is being marked as done or not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" * @return The task that was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when the taskIndex given","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" * is negative or out of bounds.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" public Task mark(int taskIndex, boolean isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" // User tries to mark/unmark a task that is out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d getSize()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" \"Unable to %s task %d :( You have %d task(s) stored.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" isDone ? \"mark\" : \"unmark\", taskIndex, getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" ));","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":" Task task \u003d getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" if (isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" task.mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":" task.unmark();","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" * Deletes the {@link Task} at the given taskIndex.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" * @param taskIndex The index of the task stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" * @return The task that was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when the taskIndex given","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" * * is negative or out of bounds.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" public Task delete(int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d getSize()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" \"Unable to \"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(\"delete\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":" + \" task %d :( You have %d task(s) stored.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":" taskIndex + 1, getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" ));","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" Task removedTask \u003d this.tasks.remove(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" return removedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" * Returns the string representation of the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" * Contains string representations of all {@link Task} stored","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" * which is suitable for {@link Storage} to write to memory.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" * @param keyword The keyword to be used to find tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":" * containing it.","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"McNaBry"},"content":" * @return An ArrayList of {@link Task} whose description","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"McNaBry"},"content":" * contains the keyword given.","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"McNaBry"},"content":" public ArrayList\u003cTask\u003e findTasks(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"McNaBry"},"content":" ArrayList\u003cTask\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"McNaBry"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"McNaBry"},"content":" int index \u003d t.findKeyword(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"McNaBry"},"content":" if (index \u003e\u003d 0)","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"McNaBry"},"content":" result.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"McNaBry"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"McNaBry"},"content":" String taskListString \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"McNaBry"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"McNaBry"},"content":" taskListString +\u003d task.toFileFormatString() + \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"McNaBry"},"content":" return taskListString.strip();","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":149}},{"path":"src/main/java/data/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":" * The custom {@link Exception} class for Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":" * Used by {@link ui.Ui} to print error messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" private String msg;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the DukeException class.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * Takes in a single line message.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" * @param msg A string containing the ","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" * description of the error.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" this.msg \u003d String.format(\"%s\", msg);","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the DukeException class.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * Takes in an array of messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" * @param msg An array of messages containing the ","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" * description of the error.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" public DukeException(String[] msg) {","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" String temp \u003d \"\";","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" for (String stub : msg) {","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" temp +\u003d String.format(\" %s\\n\", stub);","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" this.msg \u003d temp.trim().strip();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" return msg;","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"McNaBry":40}},{"path":"src/main/java/data/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import common.DateParser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" public Deadline(","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" String detail,","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" LocalDateTime deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" super(detail);","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" public Deadline(","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" String detail,","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" LocalDateTime deadline,","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" boolean isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" super(detail, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" \"[D]%s (by: %s)\",","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" super.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" DateParser.toDisplayString(this.deadline)","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" public String toFileFormatString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" \"D|%s|%s\",","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" super.toFileFormatString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" DateParser.toFileString(this.deadline)","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"McNaBry":42}},{"path":"src/main/java/data/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import common.DateParser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" public Event(","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" String detail,","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" LocalDateTime from,","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" super(detail);","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" public Event(","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" String detail,","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" LocalDateTime from,","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" LocalDateTime to,","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" boolean isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" super(detail, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" \"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" super.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" DateParser.toDisplayString(from),","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" DateParser.toDisplayString(to)","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" public String toFileFormatString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" \"E|%s|%s|%s\",","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" super.toFileFormatString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" DateParser.toFileString(from),","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" DateParser.toFileString(to)","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"McNaBry":49}},{"path":"src/main/java/data/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":" private String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" public void mark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" public void unmark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" public int findKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" return description.indexOf(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" \"[%s] %s\",","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" isDone ? \"X\" : \" \",","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" description","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" public String toFileFormatString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" \"%s|%s\",","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" isDone ? \"1\" : \"0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" description","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"McNaBry":46}},{"path":"src/main/java/data/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":" public Todo(String detail) {","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":" super(detail);","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" public Todo(String detail, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" super(detail, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" public String toFileFormatString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" \"T|%s\",","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" super.toFileFormatString()","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" \"[T]%s\", super.toString()","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"McNaBry":26}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import parser.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * The Duke class. Entry point for the Duke chatbot to start.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" * Handles all tasks created by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * Loads task from a persistent file and ","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * updates it when new tasks are created.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" * Parses the user command.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" * Handles displaying messages and errors.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" * Constructor method of the Duke chatbot. Initializes its main components:","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" * {@link TaskList}, {@link Storage}, {@link Parser} and {@link Ui}.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" * Additionally, it loads the tasks from a file stored on disk if the user ","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" * has used the chatbot previously.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" * @param filePath The path of the file storing the tasks from previous sessions.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" * @param fileDir The directory that contains the file. Used by {@link Storage}","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" * to create an empty folder when none is detected.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" public Duke(String filePath, String fileDir) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" this.storage \u003d new Storage(filePath, fileDir);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" this.tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" * Starts the Duke chatbot and the main event loop which will await","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" * for user commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" * @throws IOException Thrown when there\u0027s an issue with","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" * reading user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" public void start() throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" ui.displayIntro();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" // Begin chatbot\u0027s main event loop","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" String input \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" ui.displayInputStart();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" input \u003d ui.readInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" Command c \u003d parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" c.execute(tasks, storage, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" ui.displayError(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-20"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" Duke chatbot \u003d new Duke(","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" \"./save/data.txt\",","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" \"./save\"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" chatbot.start();","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":87,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"McNaBry":84,"-":3}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import commands.DeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import commands.EmptyCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import commands.EventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"import commands.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"import commands.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"import commands.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"import commands.TodoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"import common.DateParser;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * The Parser class. Handles the parsing of user commands","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * and returns the appropriate {@link Command} class.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * Throws a {@link DukeException} when the user gives an","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * invalid command.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" * The method parses the user command, splitting it by","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" * space and extracting the first part of the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" * It will match the first part to a set of allowable","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" * commands and return the respective {@link Command} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" * @param input The user command.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" * @return A {@link Command} instance created according to the user command.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when the command given","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" * is unrecognized.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" public Command parse(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" // Ignore empty user input","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" if (input.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" return new EmptyCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" // Extract main command first","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" String command \u003d input.split(\" \")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" // Parse main command","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" switch (command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" return parseMarkCommand(input, \"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" return parseMarkCommand(input, \"unmark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" return parseTodoCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" return parseDeadlineCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" return parseEventCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" return parseDeleteCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" return parseFindCommand(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" \"Unrecognized command \" + Ui.cTxt(command, Ui.Color.PURPLE),","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" \"Maybe create a new TODO with \"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(\"todo\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" + \" read a book?\"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" * A method to extract and join the elements from index 1 to the end.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" * Used for situations where it is needed to extract ","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" * \"read a book\" from \"todo read a book\".","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" * @param item The array containing the contents to be extracted.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" * @return A string that contains the extracted contents ","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" * joined by empty space.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" private static String extractTail(String[] item) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" return String.join(\" \",","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" Arrays.copyOfRange(","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":" item, 1, item.length","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" * Parses the content of a \"mark\" or \"unmark\" command.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" * Checks if a valid number is provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" * @param input The mark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" * @param type Indicates whether it is parsing ","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" * a mark or unmark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" * @return A {@link MarkCommand} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when no number is given.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" private Command parseMarkCommand(String input, String type) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a number:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"mark\", Ui.Color.PURPLE) + \" 1\"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" return new MarkCommand(parseArr[1], type \u003d\u003d \"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" * Parses the content of a \"todo\" command.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":" * Checks if a description was provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":" * @param input The todo command.","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" * @return A {@link TodoCommand} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when no description","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" * is given.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" private Command parseTodoCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a description:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"todo\", Ui.Color.PURPLE) + \" read a book\"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"McNaBry"},"content":" return new TodoCommand(extractTail(parseArr));","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"McNaBry"},"content":" * Parses the content of a \"deadline\" command.","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"McNaBry"},"content":" * Checks if a description was provided","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"McNaBry"},"content":" * and if a valid date was supplied using /by.","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"McNaBry"},"content":" * @param input The deadline command.","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"McNaBry"},"content":" * @return A {@link DeadlineCommand} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when no description","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"McNaBry"},"content":" * or invalid date is given.","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"McNaBry"},"content":" private Command parseDeadlineCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"McNaBry"},"content":" // Split by the \"/by\" to separate the first and second part.","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\"/by \");","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"McNaBry"},"content":" // Extract the header (command + description).","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"McNaBry"},"content":" String[] header \u003d parseArr[0].split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"McNaBry"},"content":" // Check if task descripton exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"McNaBry"},"content":" if (header.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a description:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"deadline\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"McNaBry"},"content":" + \" submit essay /by Oct 10 2023 1600\"","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"McNaBry"},"content":" // Check if a date was provided and the \"/by\" delimiter was supplied.","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a date:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"McNaBry"},"content":" \"\u003c- Remember to include /by -\u003e\",","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"deadline\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"McNaBry"},"content":" + \" submit essay /by Oct 10 2023 1600\"","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"McNaBry"},"content":" // Extract the date and add a new deadline to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"McNaBry"},"content":" LocalDateTime date \u003d DateParser.parseDateString(parseArr[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"McNaBry"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"McNaBry"},"content":" \"Oops, looks like your date is in an invalid format...\",","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"McNaBry"},"content":" \"Here are some valid formats:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"McNaBry"},"content":" \"2023-10-20, 20-10-2023, 2023/10/20, \"","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"McNaBry"},"content":" + \"20/10/2023, Oct 10 2023, 10 Oct 2023\",","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"McNaBry"},"content":" Ui.Color.PURPLE","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"McNaBry"},"content":" ),","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"McNaBry"},"content":" \"You can provide a timing as well: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(\"2023-10-20 1800\", Ui.Color.YELLOW)","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"McNaBry"},"content":" return new DeadlineCommand(","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"McNaBry"},"content":" extractTail(header),","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"McNaBry"},"content":" date","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"McNaBry"},"content":" * Parses the \"event\" command.","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"McNaBry"},"content":" * Checks if a description was provided","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"McNaBry"},"content":" * and valid dates supplied with /from and /to.","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"McNaBry"},"content":" * @param input The event command.","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"McNaBry"},"content":" * @return An {@link EventCommand} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when no description","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"McNaBry"},"content":" * or invalid dates are given.","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"McNaBry"},"content":" private Command parseEventCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"McNaBry"},"content":" // Split by \"/from\" to separate the first and (second + third) part.","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\"/from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"McNaBry"},"content":" // Extract the header (command + description).","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"McNaBry"},"content":" String[] header \u003d parseArr[0].split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"McNaBry"},"content":" // Check if task descripton exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"McNaBry"},"content":" if (header.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a description:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"event\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"McNaBry"},"content":" + \" NUS carnival /from 21 Aug 2023 /to 22 Aug 2023\"","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"McNaBry"},"content":" // Check if /from exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing \" + Ui.cTxt(\"/from\", Ui.Color.PURPLE),","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"event\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"McNaBry"},"content":" + \" NUS carnival /from 21 Aug 2023 /to 22 Aug 2023\"","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"McNaBry"},"content":" // Split by \"/to\" to separate the second and third part.","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"McNaBry"},"content":" String[] dateParse \u003d parseArr[1].split(\"/to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"McNaBry"},"content":" // Check if /to exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"McNaBry"},"content":" if (dateParse.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing \" + Ui.cTxt(\"/to\", Ui.Color.PURPLE),","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"event\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"McNaBry"},"content":" + \" NUS carnival /from 21 Aug 2023 /to 22 Aug 2023\"","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"McNaBry"},"content":" // Extract dates and validate them.","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"McNaBry"},"content":" LocalDateTime fromDate \u003d DateParser.parseDateString(dateParse[0].strip());","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"McNaBry"},"content":" LocalDateTime toDate \u003d DateParser.parseDateString(dateParse[1].strip());","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"McNaBry"},"content":" if (fromDate \u003d\u003d null || toDate \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"McNaBry"},"content":" \"Oops, looks like your date is in an invalid format...\",","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"McNaBry"},"content":" \"Here are some valid formats:\",","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"McNaBry"},"content":" \"2023-10-20, 20-10-2023, 2023/10/20, \"","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"McNaBry"},"content":" + \"20/10/2023, Oct 10 2023, 10 Oct 2023\",","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"McNaBry"},"content":" Ui.Color.PURPLE","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"McNaBry"},"content":" ),","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"McNaBry"},"content":" \"You can provide a timing as well: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(\"2023-10-20 1800\", Ui.Color.YELLOW)","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"McNaBry"},"content":" return new EventCommand(","lastModifiedDate":"2023-08-31"},{"lineNumber":259,"author":{"gitId":"McNaBry"},"content":" extractTail(header),","lastModifiedDate":"2023-08-31"},{"lineNumber":260,"author":{"gitId":"McNaBry"},"content":" fromDate,","lastModifiedDate":"2023-08-31"},{"lineNumber":261,"author":{"gitId":"McNaBry"},"content":" toDate","lastModifiedDate":"2023-08-31"},{"lineNumber":262,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":263,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":264,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":265,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"McNaBry"},"content":" * Parses the delete command.","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"McNaBry"},"content":" * Checks if a valid number was given.","lastModifiedDate":"2023-09-01"},{"lineNumber":268,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"McNaBry"},"content":" * @param input The delete command.","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"McNaBry"},"content":" * @return A {@link DeleteCommand} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when a number is not given.","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"McNaBry"},"content":" private Command parseDeleteCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":274,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":275,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":276,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":277,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a number:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":278,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"delete\", Ui.Color.PURPLE) + \" 1\"","lastModifiedDate":"2023-09-01"},{"lineNumber":279,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":280,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":282,"author":{"gitId":"McNaBry"},"content":" return new DeleteCommand(parseArr[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":283,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":284,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":285,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"McNaBry"},"content":" * Parses the find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"McNaBry"},"content":" * Checks if a valid keyword was given.","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"McNaBry"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":289,"author":{"gitId":"McNaBry"},"content":" * @param input The find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":290,"author":{"gitId":"McNaBry"},"content":" * @return A {@Link FindCommand} instance","lastModifiedDate":"2023-09-01"},{"lineNumber":291,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when a keyword is not given.","lastModifiedDate":"2023-09-01"},{"lineNumber":292,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":293,"author":{"gitId":"McNaBry"},"content":" private Command parseFindCommand(String input) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":294,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":295,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":296,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-09-01"},{"lineNumber":297,"author":{"gitId":"McNaBry"},"content":" \"Looks like you didn\u0027t provide a keyword:\",","lastModifiedDate":"2023-09-01"},{"lineNumber":298,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"find\", Ui.Color.PURPLE) + \" read\",","lastModifiedDate":"2023-09-01"},{"lineNumber":299,"author":{"gitId":"McNaBry"},"content":" \"Or try \" + Ui.cTxt(\"find\", Ui.Color.PURPLE) + \" read a book\"","lastModifiedDate":"2023-09-01"},{"lineNumber":300,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":301,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":302,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":303,"author":{"gitId":"McNaBry"},"content":" return new FindCommand(extractTail(parseArr));","lastModifiedDate":"2023-09-01"},{"lineNumber":304,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":305,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":305}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"import common.DateParser;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * The Storage class.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * Load tasks created by the user from previous session","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * via a text file. Updates the same text file for each","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * modification to the {@link TaskList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" private final String fileDir;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" private final String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" * The constructor method for the Storage class.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" * Takes in the directory and file path that the","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" * user wishes to store their tasks on memory.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" * @param filePath The file path of the file containing the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" * @param fileDir The directory of the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" public Storage(String filePath, String fileDir) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" this.fileDir \u003d fileDir;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" * This method loads in the tasks from the file specified by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" * If the file cannot be found, a new directory is created to store the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" * @return An ArrayList of {@link Task} loaded from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" BufferedReader br \u003d new BufferedReader(","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" new FileReader(filePath)","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" String line;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" String[] parse \u003d line.strip().split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" // Shortest length is 3 for any task type","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" if (parse.length \u003c 3) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" Task task \u003d this.createTask(parse);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" // Close the reader after parsing the file","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" br.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" } catch (FileNotFoundException f) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" // Create a new data directory if it cannot be found","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" new File(fileDir).mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" * This method handles the parsing of each line containing","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" * the data of a task from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" * @param parse The line containing the task data.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" * @return A {@link Task} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" private Task createTask(String[] parse) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" String taskType \u003d parse[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" boolean isDone \u003d parse[1].equals(\"1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" // Create task based on type given","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" switch(taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":" return new Todo(parse[2], isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" if (parse.length \u003c 4) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" return new Deadline(","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" parse[2],","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" DateParser.parseDateString(parse[3]),","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" if (parse.length \u003c 5) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" return new Event(","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" parse[2],","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" DateParser.parseDateString(parse[3]),","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" DateParser.parseDateString(parse[4]),","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":" isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":" * This method updates the file by overwriting its old content","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" * with the contents of the new {@link TaskList} after a modification","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" * is made by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" * @param tasks The {@link TaskList} containing the new list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when there\u0027s an issue with writing","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":" * the tasks to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"McNaBry"},"content":" public void update(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"McNaBry"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"McNaBry"},"content":" fw.write(tasks.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"McNaBry"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"McNaBry"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(\"Sorry error with saving tasks!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"McNaBry":138}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import java.io.InputStreamReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" * The Ui class.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" * Handles printing Duke\u0027s messages and errors.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * Also helps to add colour to the text printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" * The COLOR enum.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" * Contains all the allowed ANSI color codes","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" * used by Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" public static enum Color {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" RESET(\"\\u001B[0m\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" GREEN(\"\\033[0;32m\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" YELLOW(\"\\033[0;33m\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" BLUE(\"\\033[0;34m\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" PURPLE(\"\\u001B[35m\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" RED(\"\\033[0;31m\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" public final String value;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" private Color(String value) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" this.value \u003d value;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" private static BufferedReader reader \u003d new BufferedReader(","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" new InputStreamReader(System.in)","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" * This method wraps the given text with the given","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" * ANSI color codes.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" * @param text The text to be colored.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" * @param color The color to be applied.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" * @return A string with the necessary color codes inserted.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" public static String cTxt(String text, Color color) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" return color.value + text + Color.RESET.value;","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" * Displays the introduction message when Duke starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" public void displayIntro() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" \"Hi. I\u0027m \" + Ui.cTxt(\"Bryan\", Ui.Color.PURPLE),","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" \"What can I do for you?\"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" * Displays the goodbye message when exiting Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" public void displayGoodbye() {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" displayMsg(\"Bye~ Come back soon :)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" * Displays the first character on the input line.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" * Indicates where the user is typing his command.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" public void displayInputStart() {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" System.out.print(\"\u003e \");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" * Reads the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" * @return A string containing the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" * @throws IOException Thrown when there\u0027s an issue","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" * with reading user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" public String readInput() throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" return reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" * Formats and displays a single line message.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" * @param text The message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":" public void displayMsg(String text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" String msg \u003d String.format(\"\\n %s\", text);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" System.out.println(msg + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" * Formats and displays a multi-line message.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" * @param text An array of messages to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" public void displayMsg(String[] text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" String msg \u003d \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" for (String stub : text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" msg +\u003d String.format(\" %s\\n\", stub);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" * Formats and displays a single line error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" * @param text The error message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":" public void displayError(String text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" String msg \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" \"\\n %s\\n %s\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":" cTxt(\"Erm... error :(\", Color.RED),","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" text","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" * Formats and displays a multi-line error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" * @param text An array of error message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":" public void displayError(String[] text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"McNaBry"},"content":" String msg \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"McNaBry"},"content":" \"\\n %s\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"McNaBry"},"content":" cTxt(\"Erm... error :(\", Color.RED)","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"McNaBry"},"content":" for (String stub : text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"McNaBry"},"content":" msg +\u003d String.format(\" %s\\n\", stub);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"McNaBry"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":137}},{"path":"src/test/java/data/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" private static class TaskStub extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" public String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" public boolean done;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" public TaskStub(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" super(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" this.desc \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" public void mark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" super.mark();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" done \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" public void unmark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" super.unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" done \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" public void testDelete() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" TaskList tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read a book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" Task deletedTask \u003d tasks.delete(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" if (deletedTask instanceof TaskStub) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" TaskStub stub \u003d (TaskStub) deletedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" assertEquals(\"read a book\", stub.desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" fail(\"TaskStub class should be used\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" public void testDeleteOutOfBounds() {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" TaskList tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read a book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read 300 book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.delete(2)","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.delete(100)","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.delete(-1)","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" assertEquals(2, tasks.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" assertFalse(tasks.isEmpty());","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" public void testMark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" TaskList tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read a book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" tasks.mark(0, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" Task markedTask \u003d tasks.delete(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" if (markedTask instanceof TaskStub) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" TaskStub stub \u003d (TaskStub) markedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" assertTrue(stub.done);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" assertEquals(\"read a book\", stub.desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" fail(\"TaskStub class should be used\");","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" public void testUnmark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" TaskList tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read a book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" tasks.mark(0, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" tasks.mark(0, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" Task markedTask \u003d tasks.delete(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" if (markedTask instanceof TaskStub) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" TaskStub stub \u003d (TaskStub) markedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" assertEquals(false, stub.done);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" assertEquals(\"read a book\", stub.desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" public void testMarkOutOfBounds() {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" TaskList tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read a book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read 300 book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.mark(2, true)","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.mark(100, false)","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.mark(-1, true)","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":127}},{"path":"src/test/java/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import commands.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" public void testEmptyCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" Command c \u003d parser.parse(\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" assertTrue(c instanceof EmptyCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" public void testUnknownCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"error\")","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" public void testValidCommands() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" Command mark \u003d parser.parse(\"mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" Command unmark \u003d parser.parse(\"unmark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" Command list \u003d parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" Command delete \u003d parser.parse(\"delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" Command todo \u003d parser.parse(\"todo read\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" Command deadline \u003d parser.parse(","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" \"deadline read /by 2023-10-20 1800\"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" Command event \u003d parser.parse(","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" \"event read /from 2023-10-20 1800 /to 2023-10-25 1900\"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" assertTrue(mark instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" assertTrue(unmark instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" assertTrue(list instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" assertTrue(delete instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" assertTrue(todo instanceof TodoCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" assertTrue(deadline instanceof DeadlineCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" assertTrue(event instanceof EventCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" public void testValidDates() {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 2023-10-20\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 20-10-2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 20/10/2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 2023/10/20\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by Oct 10 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 20 Oct 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 2023-10-20 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 2023-10-20 630\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 2023-10-20 0630\");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" public void testInvalidMark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"mark\")","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"mark task 1\")","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" public void testInvalidDelete() {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"delete\")","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"delete task 1\")","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" public void testInvalidTodo() {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"todo\")","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" public void testInvalidDeadline() {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"deadline\")","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"deadline read\")","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"deadline read /by\")","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"deadline /by\")","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"deadline read /by random date\")","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"McNaBry"},"content":" public void testInvalidEvent() {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event\")","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event read\")","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event read /from\")","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event read /from hi\")","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event read /from hi /to\")","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event read /from hi /to bye\")","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":166}},{"path":"src/test/java/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import org.junit.jupiter.api.AfterAll;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import org.junit.jupiter.api.BeforeAll;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"public class UiTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" private static final ByteArrayOutputStream OUT_STREAM \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" private static final String RESET \u003d \"\\u001B[0m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" private static final String GREEN \u003d \"\\033[0;32m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" private static final String YELLOW \u003d \"\\033[0;33m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" private static final String BLUE \u003d \"\\033[0;34m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" private static final String PURPLE \u003d \"\\u001B[35m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" private static final String RED \u003d \"\\033[0;31m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" @BeforeAll","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" public static void setUpStreams() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" System.setOut(","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" new PrintStream(OUT_STREAM)","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" @AfterAll","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" public static void restoreStreams() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" public void testSingleLineDisplay() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(\"Hello\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" String expected \u003d String.format(\"\\n Hello\\n\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" String actual \u003d OUT_STREAM.toString().replace(\"\\r\\n\", \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" OUT_STREAM.reset();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" public void testMultiLineDisplay() {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" \"Hello, this line 1\",","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" \"and... this is line 2\",","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" \"and three!\"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" String expected \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" \"\\n Hello, this line 1\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" + \" and... this is line 2\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" + \" and three!\\n\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" String actual \u003d OUT_STREAM.toString().replace(\"\\r\\n\", \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" OUT_STREAM.reset();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" public void testSingleLineError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" ui.displayError(\"Some error message.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" String expected \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" \"\\n \" + RED + \"Erm... error :(\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" + \"\\n Some error message.\\n\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" String actual \u003d OUT_STREAM.toString().replace(\"\\r\\n\", \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" OUT_STREAM.reset();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" public void testMultiLineError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" ui.displayError(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" \"Error message\",","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" \"Help tooltip\",","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" \"Standard example\"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" String expected \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" \"\\n \" + RED + \"Erm... error :(\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" + \"\\n Error message\"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" + \"\\n Help tooltip\"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" + \"\\n Standard example\\n\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" String actual \u003d OUT_STREAM.toString().replace(\"\\r\\n\", \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" OUT_STREAM.reset();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" public void testColors() {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"GREEN\", Ui.Color.GREEN),","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"YELLOW\", Ui.Color.YELLOW),","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"BLUE\", Ui.Color.BLUE),","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"PURPLE\", Ui.Color.PURPLE),","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"RED\", Ui.Color.RED),","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" String expected \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" \"\\n \" + GREEN + \"GREEN\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" + \"\\n \" + YELLOW + \"YELLOW\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" + \"\\n \" + BLUE + \"BLUE\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" + \"\\n \" + PURPLE + \"PURPLE\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" + \"\\n \" + RED + \"RED\" + RESET + \"\\n\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" String actual \u003d OUT_STREAM.toString().replace(\"\\r\\n\", \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" OUT_STREAM.reset();","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":112}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"mark 0","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"mark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"mark first","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"todo revise basic Java concepts","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by Friday","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by 21st August","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by 2023-10-20","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2101 lecture /by 20/10/2023","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2100 lecture /by 2023/10/20","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2105 lecture /by 20-10-2023","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by 2023-10-20 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2101 lecture /by 20/10/2023 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2100 lecture /by 2023/10/20 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2105 lecture /by 20-10-2023 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by 20 Aug 2023","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by 20 Aug 2023 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":"event","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 2023-10-20","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /to 2023-10-20","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 2023-10-20 /to 2023-10-22","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 20/10/2023 1800 /to 21/10/2023 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 2023/10/20 1800 /to 2023/10/21 1900","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 20-10-2023 1800 /to 23-10-2023 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 2023-10-20 /to 2023-10-20","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 2023-10-20 /to 2023-10-20 /bug me","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":"mark -1","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":"mark 90","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":"delete 0","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":"delete 90","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":"delete 1","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":"delete -1","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"McNaBry":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":"McNaBry"},"content":"set \"BIN_PATH\u003d..\\bin\"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"REM set compile path","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"set \"SOURCE_DIR\u003d..\\src\\main\\java\"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"if exist save del save","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"REM Loop through all .java files in the directory and subdirectories","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\Duke.java","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"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":23,"author":{"gitId":"McNaBry"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"McNaBry":8,"-":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":"McNaBry"},"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":"McNaBry"},"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":"McNaBry"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"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":"McNaBry"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"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":{"McNaBry":7,"-":41}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" * The Command abstract class.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * Represents the logic that is to be executed","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * for the respective user command.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" public abstract void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) throws DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":21}},{"path":"src/main/java/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * The DeadlineCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" * Handles creating a new {@link Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the DeadlineCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * Takes in the description and date for a {@link Deadline}.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" * @param deadline The date of the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" public DeadlineCommand(String description,","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" LocalDateTime deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" public void execute(TaskList tasks,","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" Storage storage,","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" Task dl \u003d new Deadline(description, deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" tasks.add(dl);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" \"Okie! I\u0027ve added a new \" + Ui.cTxt(\"DEADLINE\", Ui.Color.BLUE) + \":\",","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" \" \" + dl.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" \"Total no. of tasks stored: \" + tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":46}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * The DeleteCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * Handles deleting a {@link Task} from {@link TaskList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" private int taskIndex;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" * The constructor method for a DeleteCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" * Takes in the index of the task to be deleted from {@link TaskList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * @param taskIndex The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when the taskIndex given","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * cannot be converted to a number.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" public DeleteCommand(String taskIndex) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" this.taskIndex \u003d Integer.parseInt(taskIndex);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"delete\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" + \" takes in a number. Try delete 1.\"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" Task removedTask \u003d tasks.delete(taskIndex - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" \"Okie! I\u0027ve deleted task \" + taskIndex + \":\",","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" \" \" + removedTask.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" \"Total no. of tasks stored: \" + tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" // Write modified task list to file","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":48}},{"path":"src/main/java/commands/EmptyCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" * The EmptyCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * Returned by {@link Parser} when no command is given.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"public class EmptyCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":18}},{"path":"src/main/java/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * The EventCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" * Handles creating a new {@link Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the EventCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * Takes in the description and the two dates of an {@link Event}.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" * @param description The description of an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" * @param from The start date of an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" * @param to The end date of an event.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" public EventCommand(String description, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" Task event \u003d new Event(description, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" tasks.add(event);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" \"Okie! I\u0027ve added a new \" + Ui.cTxt(\"EVENT\", Ui.Color.YELLOW) + \":\",","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" \" \" + event.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" \"Total no. of tasks stored: \" + tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":47}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" * The ExitCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" * Handles the exit logic when the user enters the exit command.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" ui.displayGoodbye();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":23}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * The FindCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * Finds the list of tasks containing a given keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" private String keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the FindCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * Takes in a keyword (can be one or multiple) that","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * will be used to find a list of tasks containing it.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * @param keyword The keyword to be used to find","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * a list of tasks that contains it.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" public void execute(TaskList tasks, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" ArrayList\u003cTask\u003e result \u003d tasks.findTasks(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" int count \u003d result.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" if (count \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(\"Nothing found with keyword: \" + Ui.cTxt(keyword, Ui.Color.YELLOW));","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" String[] displayArr \u003d new String[result.size() + 1];","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" displayArr[0] \u003d \"I\u0027ve found \" ","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(String.valueOf(count), Ui.Color.YELLOW)","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" + \" task(s) that matches the keyword: \" ","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(keyword, Ui.Color.YELLOW);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" for (int i \u003d 1; i \u003c result.size() + 1; i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" displayArr[i] \u003d \" \" + result.get(i - 1).toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(displayArr);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"McNaBry":51}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" * The ListCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" * Handles the display of the entire list of tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * stored in {@link TaskList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" if (tasks.isEmpty()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(\"Nothing stored.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" return;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" String[] formatTasks \u003d new String[tasks.getSize() + 1];","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" formatTasks[0] \u003d \"Here are the tasks in your list:\";","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" for (int i \u003d 0; i \u003c tasks.getSize(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" formatTasks[i + 1] \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" \"%d.%s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" i + 1, tasks.getTask(i).toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(formatTasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":32}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * The MarkCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * Handles marking/unmarking a {@link Task}.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" private int taskCount;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the MarkCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * Takes in the index of the {@link Task} and a boolean","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * indicating whether it is to be marked/unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * @param taskCount The index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * @param isDone Indicates whether the task is to be marked/unmarked.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when the taskCount given","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" * cannot be converted to a number.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" public MarkCommand(String taskCount, boolean isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" this.taskCount \u003d Integer.parseInt(taskCount);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt((isDone ? \"mark\" : \"unmark\"), Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" + \" takes in a number. Try \"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(\"mark\", Ui.Color.PURPLE) + \" 1.\"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" // User tries to mark/unmark a task that is out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" if (taskCount \u003c 1 || taskCount \u003e tasks.getSize()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" \"Unable to %s task %d :( You have %d task(s) stored.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" isDone ? \"mark\" : \"unmark\", taskCount, tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" ));","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" // Mark or unmark the task if the taskCount given is correct.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" Task task \u003d tasks.mark(taskCount - 1, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" String success \u003d isDone","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" ? \"Nice, I\u0027ve marked this task as done:\"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" : \"Okie, I\u0027ve marked this task as not done yet:\";","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[]{","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" success,","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" \" \" + task.toString()","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":65}},{"path":"src/main/java/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * The TodoCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * Handles creating a new {@link Todo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" private String description;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the TodoCommand class.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * Takes in a description of a {@link Todo}.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * @param description The description of a todo.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" public void execute(","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" TaskList tasks, Storage storage, Ui ui) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" Task todo \u003d new Todo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" tasks.add(todo);","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" storage.update(tasks);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" \"Okie! I\u0027ve added a new \" + Ui.cTxt(\"TODO\", Ui.Color.GREEN) + \":\",","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" \" \" + todo.toString(),","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" \"Total no. of tasks stored: \" + tasks.getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":39}},{"path":"src/main/java/common/DateParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package common;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import java.time.temporal.ChronoField;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * The DateParser class.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * Handles parsing date strings to {@link LocalDateTime}","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" * and displaying {@link LocalDateTime} as \"MMM dd yyyy h:mma\".","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" * Example: Aug 10 2023 6:00PM.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"public class DateParser {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * The {@link DateTimeFormatter} used to parse","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * date strings into {@link LocalDateTime}.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" private static final DateTimeFormatter parseFormat \u003d ","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" new DateTimeFormatterBuilder()","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" .append(DateTimeFormatter.ofPattern(","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" \"[d/M/yyyy]\"","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" + \"[yyyy/M/d]\"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" + \"[d-M-yyyy]\"","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" + \"[yyyy-M-d]\"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" ))","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" .append(DateTimeFormatter.ofPattern(","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" \"[d MMM yyyy]\" + \"[MMM d yyyy]\",","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" Locale.ENGLISH","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" ))","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" .optionalStart()","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" .appendPattern(\"[ HHmm][ Hmm][\u0027T\u0027HH:mm]\")","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" .optionalEnd()","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" .toFormatter();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" * The {@link DateTimeFormatter} used to display","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" * {@link LocalDateTime} as a string.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" private static final DateTimeFormatter displayFormat \u003d ","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" DateTimeFormatter.ofPattern(","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" \"MMM dd yyyy h:mma\",","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" Locale.ENGLISH","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" * Parses the string given into a {@link LocalDateTime}.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" * @param date The date string to be parsed.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" * @return A {@link LocalDateTime} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" public static LocalDateTime parseDateString(String date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" return LocalDateTime.parse(date, parseFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" * Gets the string representation of the given {@link LocalDateTime}","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" * and converts it into the format displayed by Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" * @param date The {@link LocalDateTime} to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" * @return The display string of the date given.","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" public static String toDisplayString(LocalDateTime date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" return date.format(displayFormat);","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" * Gets the string representation of the given {@link LocalDateTime}","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" * and converts it into the format that {@link Storage} uses to","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" * write to a persistent file.","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" * @param date The {@link LocalDateTime} to be stored on the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" * @return A string that can be written to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" public static String toFileString(LocalDateTime date) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" return date.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"McNaBry":88}},{"path":"src/main/java/data/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * The TaskList class.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * Manages the list of tasks that the user has created.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"public class TaskList {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the TaskList class.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * @param tasks An ArrayList if there are existing tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * else null can be passed in to instantiate","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * an empty TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" if (tasks !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" this.tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" * Checks if the TaskList contains no tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" * @return A boolean indicating whether the ","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" * TaskList is empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" return this.tasks.size() \u003d\u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" * Retrieves the number of tasks stored in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" * @return An integer indicating the number of tasks stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" public int getSize() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" return this.tasks.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" * Retrieves the {@link Task} corresponding to the taskIndex.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" * Starts from 0.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" * @param taskIndex The index of the task stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" * @return The task stored at the given index.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" public Task getTask(int taskIndex) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" return this.tasks.get(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" * Appends the given {@link Task} to the list of stored tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" * @param task The task to be stored in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" * Marks/unmarks the {@link Task} at the given taskIndex","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" * depending on isDone.","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" * @param taskIndex The index of the task stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" * @param isDone Whether the task is being marked as done or not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" * @return The task that was marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when the taskIndex given","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" * is negative or out of bounds.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" public Task mark(int taskIndex, boolean isDone) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" // User tries to mark/unmark a task that is out of bounds.","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d getSize()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" \"Unable to %s task %d :( You have %d task(s) stored.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" isDone ? \"mark\" : \"unmark\", taskIndex, getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" ));","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":" Task task \u003d getTask(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" if (isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" task.mark();","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":" task.unmark();","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" * Deletes the {@link Task} at the given taskIndex.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" * @param taskIndex The index of the task stored.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" * @return The task that was deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when the taskIndex given","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" * * is negative or out of bounds.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" public Task delete(int taskIndex) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" if (taskIndex \u003c 0 || taskIndex \u003e\u003d getSize()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" \"Unable to \"","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(\"delete\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":" + \" task %d :( You have %d task(s) stored.\",","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":" taskIndex + 1, getSize()","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" ));","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" Task removedTask \u003d this.tasks.remove(taskIndex);","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" return removedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" * Returns the string representation of the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" * Contains string representations of all {@link Task} stored","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" * which is suitable for {@link Storage} to write to memory.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" * @param keyword The keyword to be used to find tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":" * containing it.","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"McNaBry"},"content":" * @return An ArrayList of {@link Task} whose description","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"McNaBry"},"content":" * contains the keyword given.","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"McNaBry"},"content":" public ArrayList\u003cTask\u003e findTasks(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"McNaBry"},"content":" ArrayList\u003cTask\u003e result \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"McNaBry"},"content":" for (Task t : tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"McNaBry"},"content":" int index \u003d t.findKeyword(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"McNaBry"},"content":" if (index \u003e\u003d 0)","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"McNaBry"},"content":" result.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"McNaBry"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"McNaBry"},"content":" String taskListString \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"McNaBry"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"McNaBry"},"content":" taskListString +\u003d task.toFileFormatString() + \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"McNaBry"},"content":" return taskListString.strip();","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":149}},{"path":"src/main/java/data/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data.exception;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":" * The custom {@link Exception} class for Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":" * Used by {@link ui.Ui} to print error messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" private String msg;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the DukeException class.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" * Takes in a single line message.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" * @param msg A string containing the ","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" * description of the error.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" public DukeException(String msg) {","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" this.msg \u003d String.format(\"%s\", msg);","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * The constructor method of the DukeException class.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * Takes in an array of messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" * @param msg An array of messages containing the ","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" * description of the error.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" public DukeException(String[] msg) {","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" String temp \u003d \"\";","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" for (String stub : msg) {","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" temp +\u003d String.format(\" %s\\n\", stub);","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" this.msg \u003d temp.trim().strip();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" return msg;","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"McNaBry":40}},{"path":"src/main/java/data/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import common.DateParser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" public Deadline(","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" String detail,","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" LocalDateTime deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" super(detail);","lastModifiedDate":"2023-08-20"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" public Deadline(","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" String detail,","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" LocalDateTime deadline,","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" boolean isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" super(detail, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" \"[D]%s (by: %s)\",","lastModifiedDate":"2023-08-20"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" super.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" DateParser.toDisplayString(this.deadline)","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" public String toFileFormatString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" \"D|%s|%s\",","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" super.toFileFormatString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" DateParser.toFileString(this.deadline)","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-20"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"McNaBry":42}},{"path":"src/main/java/data/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import common.DateParser;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" public Event(","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" String detail,","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" LocalDateTime from,","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" LocalDateTime to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" super(detail);","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" public Event(","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" String detail,","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" LocalDateTime from,","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" LocalDateTime to,","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" boolean isDone) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" super(detail, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" \"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-08-20"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" super.toString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" DateParser.toDisplayString(from),","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" DateParser.toDisplayString(to)","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" public String toFileFormatString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" \"E|%s|%s|%s\",","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" super.toFileFormatString(),","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" DateParser.toFileString(from),","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" DateParser.toFileString(to)","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-20"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"McNaBry":49}},{"path":"src/main/java/data/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"public class Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":" private String description;","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-20"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" public void mark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" public void unmark() {","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" public int findKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" return description.indexOf(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-08-20"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-20"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" \"[%s] %s\",","lastModifiedDate":"2023-08-20"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" isDone ? \"X\" : \" \",","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" description","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-20"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" public String toFileFormatString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" \"%s|%s\",","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" isDone ? \"1\" : \"0\",","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" description","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-20"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"McNaBry":46}},{"path":"src/main/java/data/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data.tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":" public Todo(String detail) {","lastModifiedDate":"2023-08-20"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":" super(detail);","lastModifiedDate":"2023-08-20"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" public Todo(String detail, boolean isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" super(detail, isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-20"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" public String toFileFormatString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-20"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" \"T|%s\",","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" super.toFileFormatString()","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-20"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-20"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" return String.format(","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" \"[T]%s\", super.toString()","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-20"}],"authorContributionMap":{"McNaBry":26}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-20"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import parser.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-20"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" * The Duke class. Entry point for the Duke chatbot to start.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" * Handles all tasks created by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * Loads task from a persistent file and ","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * updates it when new tasks are created.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" private Storage storage;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" * Parses the user command.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" * Handles displaying messages and errors.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" * Constructor method of the Duke chatbot. Initializes its main components:","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" * {@link TaskList}, {@link Storage}, {@link Parser} and {@link Ui}.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" * Additionally, it loads the tasks from a file stored on disk if the user ","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" * has used the chatbot previously.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" * @param filePath The path of the file storing the tasks from previous sessions.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" * @param fileDir The directory that contains the file. Used by {@link Storage}","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" * to create an empty folder when none is detected.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" public Duke(String filePath, String fileDir) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" this.storage \u003d new Storage(filePath, fileDir);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" this.tasks \u003d new TaskList(this.storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" this.parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" * Starts the Duke chatbot and the main event loop which will await","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" * for user commands.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" * @throws IOException Thrown when there\u0027s an issue with","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" * reading user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" public void start() throws IOException {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" ui.displayIntro();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" // Begin chatbot\u0027s main event loop","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" String input \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" ui.displayInputStart();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" input \u003d ui.readInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" Command c \u003d parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" c.execute(tasks, storage, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" ui.displayError(e.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-20"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" Duke chatbot \u003d new Duke(","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" \"./save/data.txt\",","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" \"./save\"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" chatbot.start();","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":87,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"McNaBry":84,"-":3}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import commands.DeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import commands.EmptyCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import commands.EventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"import commands.FindCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"import commands.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"import commands.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"import commands.TodoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"import common.DateParser;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * The Parser class. Handles the parsing of user commands","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * and returns the appropriate {@link Command} class.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * Throws a {@link DukeException} when the user gives an","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" * invalid command.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"public class Parser {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" * The method parses the user command, splitting it by","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" * space and extracting the first part of the command.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" * It will match the first part to a set of allowable","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" * commands and return the respective {@link Command} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" * @param input The user command.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" * @return A {@link Command} instance created according to the user command.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when the command given","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" * is unrecognized.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" public Command parse(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" // Ignore empty user input","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" if (input.equals(\"\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" return new EmptyCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" // Extract main command first","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" String command \u003d input.split(\" \")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" // Parse main command","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" switch (command) {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" case \"bye\":","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" case \"list\":","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" case \"mark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" return parseMarkCommand(input, \"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" return parseMarkCommand(input, \"unmark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" case \"todo\":","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" return parseTodoCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" return parseDeadlineCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" case \"event\":","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" return parseEventCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" case \"delete\":","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" return parseDeleteCommand(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" return parseFindCommand(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" \"Unrecognized command \" + Ui.cTxt(command, Ui.Color.PURPLE),","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" \"Maybe create a new TODO with \"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(\"todo\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" + \" read a book?\"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" * A method to extract and join the elements from index 1 to the end.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" * Used for situations where it is needed to extract ","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" * \"read a book\" from \"todo read a book\".","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" * @param item The array containing the contents to be extracted.","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" * @return A string that contains the extracted contents ","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" * joined by empty space.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" private static String extractTail(String[] item) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" return String.join(\" \",","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" Arrays.copyOfRange(","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":" item, 1, item.length","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" )","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" * Parses the content of a \"mark\" or \"unmark\" command.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" * Checks if a valid number is provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" * @param input The mark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" * @param type Indicates whether it is parsing ","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" * a mark or unmark command.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" * @return A {@link MarkCommand} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when no number is given.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" private Command parseMarkCommand(String input, String type) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a number:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"mark\", Ui.Color.PURPLE) + \" 1\"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" return new MarkCommand(parseArr[1], type \u003d\u003d \"mark\");","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" * Parses the content of a \"todo\" command.","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":" * Checks if a description was provided.","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":" * @param input The todo command.","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" * @return A {@link TodoCommand} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when no description","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" * is given.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" private Command parseTodoCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a description:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"todo\", Ui.Color.PURPLE) + \" read a book\"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"McNaBry"},"content":" return new TodoCommand(extractTail(parseArr));","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"McNaBry"},"content":" * Parses the content of a \"deadline\" command.","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"McNaBry"},"content":" * Checks if a description was provided","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"McNaBry"},"content":" * and if a valid date was supplied using /by.","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"McNaBry"},"content":" * @param input The deadline command.","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"McNaBry"},"content":" * @return A {@link DeadlineCommand} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when no description","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"McNaBry"},"content":" * or invalid date is given.","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"McNaBry"},"content":" private Command parseDeadlineCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"McNaBry"},"content":" // Split by the \"/by\" to separate the first and second part.","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\"/by \");","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"McNaBry"},"content":" // Extract the header (command + description).","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"McNaBry"},"content":" String[] header \u003d parseArr[0].split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"McNaBry"},"content":" // Check if task descripton exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"McNaBry"},"content":" if (header.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a description:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"deadline\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"McNaBry"},"content":" + \" submit essay /by Oct 10 2023 1600\"","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"McNaBry"},"content":" // Check if a date was provided and the \"/by\" delimiter was supplied.","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":167,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a date:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"McNaBry"},"content":" \"\u003c- Remember to include /by -\u003e\",","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"deadline\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"McNaBry"},"content":" + \" submit essay /by Oct 10 2023 1600\"","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"McNaBry"},"content":" // Extract the date and add a new deadline to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":175,"author":{"gitId":"McNaBry"},"content":" LocalDateTime date \u003d DateParser.parseDateString(parseArr[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"McNaBry"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"McNaBry"},"content":" \"Oops, looks like your date is in an invalid format...\",","lastModifiedDate":"2023-08-31"},{"lineNumber":179,"author":{"gitId":"McNaBry"},"content":" \"Here are some valid formats:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":180,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"McNaBry"},"content":" \"2023-10-20, 20-10-2023, 2023/10/20, \"","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"McNaBry"},"content":" + \"20/10/2023, Oct 10 2023, 10 Oct 2023\",","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"McNaBry"},"content":" Ui.Color.PURPLE","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"McNaBry"},"content":" ),","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"McNaBry"},"content":" \"You can provide a timing as well: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(\"2023-10-20 1800\", Ui.Color.YELLOW)","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"McNaBry"},"content":" return new DeadlineCommand(","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"McNaBry"},"content":" extractTail(header),","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"McNaBry"},"content":" date","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":193,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":194,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":195,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"McNaBry"},"content":" * Parses the \"event\" command.","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"McNaBry"},"content":" * Checks if a description was provided","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"McNaBry"},"content":" * and valid dates supplied with /from and /to.","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"McNaBry"},"content":" * @param input The event command.","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"McNaBry"},"content":" * @return An {@link EventCommand} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when no description","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"McNaBry"},"content":" * or invalid dates are given.","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"McNaBry"},"content":" private Command parseEventCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"McNaBry"},"content":" // Split by \"/from\" to separate the first and (second + third) part.","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\"/from \");","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"McNaBry"},"content":" // Extract the header (command + description).","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"McNaBry"},"content":" String[] header \u003d parseArr[0].split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":211,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":212,"author":{"gitId":"McNaBry"},"content":" // Check if task descripton exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":213,"author":{"gitId":"McNaBry"},"content":" if (header.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":214,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":215,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a description:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":216,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"event\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"McNaBry"},"content":" + \" NUS carnival /from 21 Aug 2023 /to 22 Aug 2023\"","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":219,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":220,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"McNaBry"},"content":" // Check if /from exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing \" + Ui.cTxt(\"/from\", Ui.Color.PURPLE),","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"event\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"McNaBry"},"content":" + \" NUS carnival /from 21 Aug 2023 /to 22 Aug 2023\"","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"McNaBry"},"content":" // Split by \"/to\" to separate the second and third part.","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"McNaBry"},"content":" String[] dateParse \u003d parseArr[1].split(\"/to \");","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":233,"author":{"gitId":"McNaBry"},"content":" // Check if /to exists.","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"McNaBry"},"content":" if (dateParse.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing \" + Ui.cTxt(\"/to\", Ui.Color.PURPLE),","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"event\", Ui.Color.PURPLE)","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"McNaBry"},"content":" + \" NUS carnival /from 21 Aug 2023 /to 22 Aug 2023\"","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"McNaBry"},"content":" // Extract dates and validate them.","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"McNaBry"},"content":" LocalDateTime fromDate \u003d DateParser.parseDateString(dateParse[0].strip());","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"McNaBry"},"content":" LocalDateTime toDate \u003d DateParser.parseDateString(dateParse[1].strip());","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"McNaBry"},"content":" if (fromDate \u003d\u003d null || toDate \u003d\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-09-01"},{"lineNumber":247,"author":{"gitId":"McNaBry"},"content":" \"Oops, looks like your date is in an invalid format...\",","lastModifiedDate":"2023-09-01"},{"lineNumber":248,"author":{"gitId":"McNaBry"},"content":" \"Here are some valid formats:\",","lastModifiedDate":"2023-09-01"},{"lineNumber":249,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(","lastModifiedDate":"2023-09-01"},{"lineNumber":250,"author":{"gitId":"McNaBry"},"content":" \"2023-10-20, 20-10-2023, 2023/10/20, \"","lastModifiedDate":"2023-09-01"},{"lineNumber":251,"author":{"gitId":"McNaBry"},"content":" + \"20/10/2023, Oct 10 2023, 10 Oct 2023\",","lastModifiedDate":"2023-09-01"},{"lineNumber":252,"author":{"gitId":"McNaBry"},"content":" Ui.Color.PURPLE","lastModifiedDate":"2023-09-01"},{"lineNumber":253,"author":{"gitId":"McNaBry"},"content":" ),","lastModifiedDate":"2023-09-01"},{"lineNumber":254,"author":{"gitId":"McNaBry"},"content":" \"You can provide a timing as well: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":255,"author":{"gitId":"McNaBry"},"content":" + Ui.cTxt(\"2023-10-20 1800\", Ui.Color.YELLOW)","lastModifiedDate":"2023-09-01"},{"lineNumber":256,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":257,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"McNaBry"},"content":" return new EventCommand(","lastModifiedDate":"2023-08-31"},{"lineNumber":259,"author":{"gitId":"McNaBry"},"content":" extractTail(header),","lastModifiedDate":"2023-08-31"},{"lineNumber":260,"author":{"gitId":"McNaBry"},"content":" fromDate,","lastModifiedDate":"2023-08-31"},{"lineNumber":261,"author":{"gitId":"McNaBry"},"content":" toDate","lastModifiedDate":"2023-08-31"},{"lineNumber":262,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":263,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":264,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":265,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":266,"author":{"gitId":"McNaBry"},"content":" * Parses the delete command.","lastModifiedDate":"2023-09-01"},{"lineNumber":267,"author":{"gitId":"McNaBry"},"content":" * Checks if a valid number was given.","lastModifiedDate":"2023-09-01"},{"lineNumber":268,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":269,"author":{"gitId":"McNaBry"},"content":" * @param input The delete command.","lastModifiedDate":"2023-09-01"},{"lineNumber":270,"author":{"gitId":"McNaBry"},"content":" * @return A {@link DeleteCommand} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when a number is not given.","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":273,"author":{"gitId":"McNaBry"},"content":" private Command parseDeleteCommand(String input) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":274,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":275,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":276,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":277,"author":{"gitId":"McNaBry"},"content":" \"Looks like you\u0027re missing a number:\",","lastModifiedDate":"2023-08-31"},{"lineNumber":278,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"delete\", Ui.Color.PURPLE) + \" 1\"","lastModifiedDate":"2023-09-01"},{"lineNumber":279,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":280,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":282,"author":{"gitId":"McNaBry"},"content":" return new DeleteCommand(parseArr[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":283,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":284,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":285,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":286,"author":{"gitId":"McNaBry"},"content":" * Parses the find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":287,"author":{"gitId":"McNaBry"},"content":" * Checks if a valid keyword was given.","lastModifiedDate":"2023-09-01"},{"lineNumber":288,"author":{"gitId":"McNaBry"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":289,"author":{"gitId":"McNaBry"},"content":" * @param input The find command.","lastModifiedDate":"2023-09-01"},{"lineNumber":290,"author":{"gitId":"McNaBry"},"content":" * @return A {@Link FindCommand} instance","lastModifiedDate":"2023-09-01"},{"lineNumber":291,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when a keyword is not given.","lastModifiedDate":"2023-09-01"},{"lineNumber":292,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":293,"author":{"gitId":"McNaBry"},"content":" private Command parseFindCommand(String input) throws DukeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":294,"author":{"gitId":"McNaBry"},"content":" String[] parseArr \u003d input.split(\" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":295,"author":{"gitId":"McNaBry"},"content":" if (parseArr.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":296,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(new String[] {","lastModifiedDate":"2023-09-01"},{"lineNumber":297,"author":{"gitId":"McNaBry"},"content":" \"Looks like you didn\u0027t provide a keyword:\",","lastModifiedDate":"2023-09-01"},{"lineNumber":298,"author":{"gitId":"McNaBry"},"content":" \"Try \" + Ui.cTxt(\"find\", Ui.Color.PURPLE) + \" read\",","lastModifiedDate":"2023-09-01"},{"lineNumber":299,"author":{"gitId":"McNaBry"},"content":" \"Or try \" + Ui.cTxt(\"find\", Ui.Color.PURPLE) + \" read a book\"","lastModifiedDate":"2023-09-01"},{"lineNumber":300,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-09-01"},{"lineNumber":301,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":302,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":303,"author":{"gitId":"McNaBry"},"content":" return new FindCommand(extractTail(parseArr));","lastModifiedDate":"2023-09-01"},{"lineNumber":304,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":305,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":305}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import java.io.File;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"import common.DateParser;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"import data.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Event;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Todo;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" * The Storage class.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" * Load tasks created by the user from previous session","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" * via a text file. Updates the same text file for each","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" * modification to the {@link TaskList}.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":"public class Storage {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" private final String fileDir;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" private final String filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" * The constructor method for the Storage class.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" * Takes in the directory and file path that the","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" * user wishes to store their tasks on memory.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" * @param filePath The file path of the file containing the tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" * @param fileDir The directory of the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" public Storage(String filePath, String fileDir) {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" this.fileDir \u003d fileDir;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" * This method loads in the tasks from the file specified by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" * If the file cannot be found, a new directory is created to store the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" * @return An ArrayList of {@link Task} loaded from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" public ArrayList\u003cTask\u003e load() {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" BufferedReader br \u003d new BufferedReader(","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" new FileReader(filePath)","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" String line;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" while ((line \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" String[] parse \u003d line.strip().split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" // Shortest length is 3 for any task type","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" if (parse.length \u003c 3) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" Task task \u003d this.createTask(parse);","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" tasks.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" // Close the reader after parsing the file","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" br.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" return tasks;","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" } catch (FileNotFoundException f) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" // Create a new data directory if it cannot be found","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" new File(fileDir).mkdir();","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" * This method handles the parsing of each line containing","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" * the data of a task from the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" * @param parse The line containing the task data.","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" * @return A {@link Task} instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" private Task createTask(String[] parse) {","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" String taskType \u003d parse[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" boolean isDone \u003d parse[1].equals(\"1\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" // Create task based on type given","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" switch(taskType) {","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":" return new Todo(parse[2], isDone);","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" if (parse.length \u003c 4) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" return new Deadline(","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" parse[2],","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" DateParser.parseDateString(parse[3]),","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" if (parse.length \u003c 5) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" return new Event(","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" parse[2],","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" DateParser.parseDateString(parse[3]),","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" DateParser.parseDateString(parse[4]),","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":" isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" default:","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":" * This method updates the file by overwriting its old content","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" * with the contents of the new {@link TaskList} after a modification","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" * is made by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" * @param tasks The {@link TaskList} containing the new list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" * @throws DukeException Thrown when there\u0027s an issue with writing","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":" * the tasks to file.","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"McNaBry"},"content":" public void update(TaskList tasks) throws DukeException {","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"McNaBry"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":132,"author":{"gitId":"McNaBry"},"content":" fw.write(tasks.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"McNaBry"},"content":" fw.close();","lastModifiedDate":"2023-08-29"},{"lineNumber":134,"author":{"gitId":"McNaBry"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":135,"author":{"gitId":"McNaBry"},"content":" throw new DukeException(\"Sorry error with saving tasks!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":136,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":137,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":138,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"McNaBry":138}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import java.io.InputStreamReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":" * The Ui class.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":" * Handles printing Duke\u0027s messages and errors.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":" * Also helps to add colour to the text printed.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"public class Ui {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" * The COLOR enum.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" * Contains all the allowed ANSI color codes","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" * used by Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" public static enum Color {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" RESET(\"\\u001B[0m\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" GREEN(\"\\033[0;32m\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" YELLOW(\"\\033[0;33m\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" BLUE(\"\\033[0;34m\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" PURPLE(\"\\u001B[35m\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" RED(\"\\033[0;31m\");","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" public final String value;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" private Color(String value) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" this.value \u003d value;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" private static BufferedReader reader \u003d new BufferedReader(","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" new InputStreamReader(System.in)","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" * This method wraps the given text with the given","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" * ANSI color codes.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" * @param text The text to be colored.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" * @param color The color to be applied.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" * @return A string with the necessary color codes inserted.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" public static String cTxt(String text, Color color) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" return color.value + text + Color.RESET.value;","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" * Displays the introduction message when Duke starts.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" public void displayIntro() {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" \"Hi. I\u0027m \" + Ui.cTxt(\"Bryan\", Ui.Color.PURPLE),","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" \"What can I do for you?\"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" * Displays the goodbye message when exiting Duke.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" public void displayGoodbye() {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" displayMsg(\"Bye~ Come back soon :)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" * Displays the first character on the input line.","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" * Indicates where the user is typing his command.","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" public void displayInputStart() {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" System.out.print(\"\u003e \");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" * Reads the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" * @return A string containing the user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" * @throws IOException Thrown when there\u0027s an issue","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" * with reading user input.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" public String readInput() throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" return reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" * Formats and displays a single line message.","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" * @param text The message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":" public void displayMsg(String text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" String msg \u003d String.format(\"\\n %s\", text);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" System.out.println(msg + \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" * Formats and displays a multi-line message.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" * @param text An array of messages to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" public void displayMsg(String[] text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" String msg \u003d \"\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" for (String stub : text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" msg +\u003d String.format(\" %s\\n\", stub);","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" * Formats and displays a single line error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" * @param text The error message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":" public void displayError(String text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" String msg \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" \"\\n %s\\n %s\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":" cTxt(\"Erm... error :(\", Color.RED),","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" text","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" * Formats and displays a multi-line error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" * @param text An array of error message to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":" public void displayError(String[] text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"McNaBry"},"content":" String msg \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"McNaBry"},"content":" \"\\n %s\\n\",","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"McNaBry"},"content":" cTxt(\"Erm... error :(\", Color.RED)","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"McNaBry"},"content":" for (String stub : text) {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"McNaBry"},"content":" msg +\u003d String.format(\" %s\\n\", stub);","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"McNaBry"},"content":" System.out.println(msg);","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":137}},{"path":"src/test/java/data/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package data;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"public class TaskListTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" private static class TaskStub extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" public String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" public boolean done;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" public TaskStub(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" super(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" this.desc \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" public void mark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" super.mark();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" done \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" public void unmark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" super.unmark();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" done \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" public void testDelete() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" TaskList tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read a book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" Task deletedTask \u003d tasks.delete(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" if (deletedTask instanceof TaskStub) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" TaskStub stub \u003d (TaskStub) deletedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" assertEquals(\"read a book\", stub.desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" fail(\"TaskStub class should be used\");","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" public void testDeleteOutOfBounds() {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" TaskList tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read a book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read 300 book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.delete(2)","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.delete(100)","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.delete(-1)","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" assertEquals(2, tasks.getSize());","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" assertFalse(tasks.isEmpty());","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" public void testMark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" TaskList tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read a book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" tasks.mark(0, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" Task markedTask \u003d tasks.delete(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" if (markedTask instanceof TaskStub) {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" TaskStub stub \u003d (TaskStub) markedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" assertTrue(stub.done);","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" assertEquals(\"read a book\", stub.desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" fail(\"TaskStub class should be used\");","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" public void testUnmark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" TaskList tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read a book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" tasks.mark(0, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" tasks.mark(0, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" Task markedTask \u003d tasks.delete(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" if (markedTask instanceof TaskStub) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" TaskStub stub \u003d (TaskStub) markedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" assertEquals(false, stub.done);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" assertEquals(\"read a book\", stub.desc);","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" public void testMarkOutOfBounds() {","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" TaskList tasks \u003d new TaskList(null);","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read a book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":" tasks.add(new TaskStub(\"read 300 book\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.mark(2, true)","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.mark(100, false)","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" () -\u003e tasks.mark(-1, true)","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":127}},{"path":"src/test/java/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import commands.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import data.exception.DukeException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" public void testEmptyCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" Command c \u003d parser.parse(\"\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" assertTrue(c instanceof EmptyCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" public void testUnknownCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"error\")","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" public void testValidCommands() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" Command mark \u003d parser.parse(\"mark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" Command unmark \u003d parser.parse(\"unmark 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" Command list \u003d parser.parse(\"list\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":" Command delete \u003d parser.parse(\"delete 1\");","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" Command todo \u003d parser.parse(\"todo read\");","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" Command deadline \u003d parser.parse(","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" \"deadline read /by 2023-10-20 1800\"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" Command event \u003d parser.parse(","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" \"event read /from 2023-10-20 1800 /to 2023-10-25 1900\"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" assertTrue(mark instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" assertTrue(unmark instanceof MarkCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" assertTrue(list instanceof ListCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" assertTrue(delete instanceof DeleteCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" assertTrue(todo instanceof TodoCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" assertTrue(deadline instanceof DeadlineCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" assertTrue(event instanceof EventCommand);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" public void testValidDates() {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 2023-10-20\");","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 20-10-2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 20/10/2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 2023/10/20\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by Oct 10 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 20 Oct 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 2023-10-20 1800\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 2023-10-20 630\");","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" parser.parse(\"deadline read /by 2023-10-20 0630\");","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" fail(\"Exception should not be thrown\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" public void testInvalidMark() {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"mark\")","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"mark task 1\")","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" public void testInvalidDelete() {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"delete\")","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"delete task 1\")","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" public void testInvalidTodo() {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"todo\")","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"McNaBry"},"content":" public void testInvalidDeadline() {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"deadline\")","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"deadline read\")","lastModifiedDate":"2023-08-31"},{"lineNumber":123,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":124,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":125,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"deadline read /by\")","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":128,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"deadline /by\")","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"deadline read /by random date\")","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":138,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":139,"author":{"gitId":"McNaBry"},"content":" public void testInvalidEvent() {","lastModifiedDate":"2023-08-31"},{"lineNumber":140,"author":{"gitId":"McNaBry"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":141,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event\")","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event read\")","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event read /from\")","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":155,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event read /from hi\")","lastModifiedDate":"2023-08-31"},{"lineNumber":156,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":157,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event read /from hi /to\")","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"McNaBry"},"content":" assertThrows(","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"McNaBry"},"content":" DukeException.class,","lastModifiedDate":"2023-08-31"},{"lineNumber":163,"author":{"gitId":"McNaBry"},"content":" () -\u003e parser.parse(\"event read /from hi /to bye\")","lastModifiedDate":"2023-08-31"},{"lineNumber":164,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":165,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":166,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":166}},{"path":"src/test/java/ui/UiTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"package ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"import org.junit.jupiter.api.AfterAll;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"import org.junit.jupiter.api.BeforeAll;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"public class UiTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":" private static final ByteArrayOutputStream OUT_STREAM \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":" private static final String RESET \u003d \"\\u001B[0m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":" private static final String GREEN \u003d \"\\033[0;32m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":" private static final String YELLOW \u003d \"\\033[0;33m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":" private static final String BLUE \u003d \"\\033[0;34m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":" private static final String PURPLE \u003d \"\\u001B[35m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":" private static final String RED \u003d \"\\033[0;31m\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":" @BeforeAll","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":" public static void setUpStreams() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":" System.setOut(","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":" new PrintStream(OUT_STREAM)","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":" @AfterAll","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":" public static void restoreStreams() {","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":" System.setOut(System.out);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":" public void testSingleLineDisplay() {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(\"Hello\");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":" String expected \u003d String.format(\"\\n Hello\\n\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":" String actual \u003d OUT_STREAM.toString().replace(\"\\r\\n\", \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":" OUT_STREAM.reset();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":" public void testMultiLineDisplay() {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":" \"Hello, this line 1\",","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":" \"and... this is line 2\",","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":" \"and three!\"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"McNaBry"},"content":" String expected \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"McNaBry"},"content":" \"\\n Hello, this line 1\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"McNaBry"},"content":" + \" and... this is line 2\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"McNaBry"},"content":" + \" and three!\\n\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"McNaBry"},"content":" String actual \u003d OUT_STREAM.toString().replace(\"\\r\\n\", \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"McNaBry"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"McNaBry"},"content":" OUT_STREAM.reset();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"McNaBry"},"content":" public void testSingleLineError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"McNaBry"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"McNaBry"},"content":" ui.displayError(\"Some error message.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"McNaBry"},"content":" String expected \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"McNaBry"},"content":" \"\\n \" + RED + \"Erm... error :(\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"McNaBry"},"content":" + \"\\n Some error message.\\n\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"McNaBry"},"content":" String actual \u003d OUT_STREAM.toString().replace(\"\\r\\n\", \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"McNaBry"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"McNaBry"},"content":" OUT_STREAM.reset();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"McNaBry"},"content":" public void testMultiLineError() {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"McNaBry"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"McNaBry"},"content":" ui.displayError(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"McNaBry"},"content":" \"Error message\",","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"McNaBry"},"content":" \"Help tooltip\",","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"McNaBry"},"content":" \"Standard example\"","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"McNaBry"},"content":" String expected \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"McNaBry"},"content":" \"\\n \" + RED + \"Erm... error :(\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"McNaBry"},"content":" + \"\\n Error message\"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"McNaBry"},"content":" + \"\\n Help tooltip\"","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"McNaBry"},"content":" + \"\\n Standard example\\n\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"McNaBry"},"content":" String actual \u003d OUT_STREAM.toString().replace(\"\\r\\n\", \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"McNaBry"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"McNaBry"},"content":" OUT_STREAM.reset();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"McNaBry"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"McNaBry"},"content":" public void testColors() {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"McNaBry"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"McNaBry"},"content":" ui.displayMsg(new String[] {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"GREEN\", Ui.Color.GREEN),","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"YELLOW\", Ui.Color.YELLOW),","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"BLUE\", Ui.Color.BLUE),","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"PURPLE\", Ui.Color.PURPLE),","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"McNaBry"},"content":" Ui.cTxt(\"RED\", Ui.Color.RED),","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"McNaBry"},"content":" });","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"McNaBry"},"content":" String expected \u003d String.format(","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"McNaBry"},"content":" \"\\n \" + GREEN + \"GREEN\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"McNaBry"},"content":" + \"\\n \" + YELLOW + \"YELLOW\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"McNaBry"},"content":" + \"\\n \" + BLUE + \"BLUE\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"McNaBry"},"content":" + \"\\n \" + PURPLE + \"PURPLE\" + RESET","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"McNaBry"},"content":" + \"\\n \" + RED + \"RED\" + RESET + \"\\n\\n\"","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"McNaBry"},"content":" );","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"McNaBry"},"content":" String actual \u003d OUT_STREAM.toString().replace(\"\\r\\n\", \"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"McNaBry"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"McNaBry"},"content":" OUT_STREAM.reset();","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"McNaBry"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"McNaBry"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"McNaBry":112}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":2,"author":{"gitId":"McNaBry"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":3,"author":{"gitId":"McNaBry"},"content":"mark 0","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"McNaBry"},"content":"mark -1","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"McNaBry"},"content":"mark first","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"todo","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"todo revise basic Java concepts","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"deadline","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by Friday","lastModifiedDate":"2023-08-21"},{"lineNumber":11,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by 21st August","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by 2023-10-20","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2101 lecture /by 20/10/2023","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2100 lecture /by 2023/10/20","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2105 lecture /by 20-10-2023","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by 2023-10-20 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2101 lecture /by 20/10/2023 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2100 lecture /by 2023/10/20 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2105 lecture /by 20-10-2023 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by 20 Aug 2023","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"McNaBry"},"content":"deadline watch CS2103T lecture /by 20 Aug 2023 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"McNaBry"},"content":"event","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 2023-10-20","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /to 2023-10-20","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 2023-10-20 /to 2023-10-22","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 20/10/2023 1800 /to 21/10/2023 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 2023/10/20 1800 /to 2023/10/21 1900","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 20-10-2023 1800 /to 23-10-2023 1800","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 2023-10-20 /to 2023-10-20","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"McNaBry"},"content":"event NUS wellness week /from 2023-10-20 /to 2023-10-20 /bug me","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"McNaBry"},"content":"mark -1","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"McNaBry"},"content":"mark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":35,"author":{"gitId":"McNaBry"},"content":"mark 3","lastModifiedDate":"2023-08-21"},{"lineNumber":36,"author":{"gitId":"McNaBry"},"content":"mark 90","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"McNaBry"},"content":"unmark 1","lastModifiedDate":"2023-08-21"},{"lineNumber":39,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":40,"author":{"gitId":"McNaBry"},"content":"delete 0","lastModifiedDate":"2023-08-21"},{"lineNumber":41,"author":{"gitId":"McNaBry"},"content":"delete 90","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"McNaBry"},"content":"delete 1","lastModifiedDate":"2023-08-21"},{"lineNumber":43,"author":{"gitId":"McNaBry"},"content":"delete -1","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":45,"author":{"gitId":"McNaBry"},"content":"delete 3","lastModifiedDate":"2023-08-21"},{"lineNumber":46,"author":{"gitId":"McNaBry"},"content":"list","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"McNaBry"},"content":"bye","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"McNaBry":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":"McNaBry"},"content":"set \"BIN_PATH\u003d..\\bin\"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"McNaBry"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"McNaBry"},"content":"REM set compile path","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"McNaBry"},"content":"set \"SOURCE_DIR\u003d..\\src\\main\\java\"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":12,"author":{"gitId":"McNaBry"},"content":"if exist save del save","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"McNaBry"},"content":"REM Loop through all .java files in the directory and subdirectories","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"McNaBry"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\Duke.java","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"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":23,"author":{"gitId":"McNaBry"},"content":"java -classpath ..\\bin duke.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"McNaBry":8,"-":18}}] diff --git a/McNaBry_ip_master/commits.json b/McNaBry_ip_master/commits.json index 23de4859..c297ecc0 100644 --- a/McNaBry_ip_master/commits.json +++ b/McNaBry_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"McNaBry":[{"date":"2023-08-20","commitResults":[{"hash":"1004ea0c58f4ece776e9e79e4234c7387e6d4489","isMergeCommit":false,"messageTitle":"Chatbot initial skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"97272f714aa57f7e108524c39f575de588fd9fee","isMergeCommit":false,"messageTitle":"chatbot echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":4}}},{"hash":"62d71382dc65544338afde5a448e8938c10ccfba","isMergeCommit":false,"messageTitle":"chatbot storage and listing function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":2}}},{"hash":"3f753ca68e7017765f25592e2f982f2bd564ab5d","isMergeCommit":false,"messageTitle":"chatbot marks tasks as done/undone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":11}}},{"hash":"11bbcce1680aa85cb08dfcd1a8e3ea686cc85689","isMergeCommit":false,"messageTitle":"support for todo, event \u0026 deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":23}}}]},{"date":"2023-08-21","commitResults":[{"hash":"395a8876bd71d90e76afea9475527b72c78f0ce0","isMergeCommit":false,"messageTitle":"added coloring for task type","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":12}}},{"hash":"e91017b68b510c7fdd169ee07638fee89a8e458f","isMergeCommit":false,"messageTitle":"add testing for level 0-4","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"4e7d04b5080b3f504467564d37fa8b30c2404406","isMergeCommit":false,"messageTitle":"error handling for invalid command and argument for mark/unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":7}}},{"hash":"e6c139badc6c0b47bd7d17294329662bd15748a7","isMergeCommit":false,"messageTitle":"add error handling for invalid task creation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":33}}},{"hash":"77e6be3d8175d7bdd582d4e8e05baf865cbef896","isMergeCommit":false,"messageTitle":"expanded scope of testing to include errors","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}},{"hash":"a6f24523824e7c640c29fc4391269798ac1f734b","isMergeCommit":false,"messageTitle":"add test to mark deadline and event","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"57f920ee34ae8f46afd52e0ca2d6220a4eddab3b","isMergeCommit":false,"messageTitle":"Replace task array with arrayList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":14}}},{"hash":"6723175540fd4aac069f05c214887ae711f1bd68","isMergeCommit":false,"messageTitle":"Add delete task function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":45,"deletions":5}}}]},{"date":"2023-08-28","commitResults":[{"hash":"82b1f28eeae7bbfa37ec28a1c71f4be02b30fe62","isMergeCommit":false,"messageTitle":"Add string representation for each task when saved to file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":3}}}]},{"date":"2023-08-29","commitResults":[{"hash":"97f982e6c10ab5f1037957102ec0fd06739ac3a0","isMergeCommit":false,"messageTitle":"Add save tasks feature","messageBody":"Chatbot now writes the list of tasks to a file when a new task is added, deleted or marked/unmarked.\n\nChatbot also reads from the file when starting and loads the tasks list.\n\nEXPECTED.txt is updated to handle the new changes.\n","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":36}}},{"hash":"c4ec87d977c3981e66e1d0443adcbecb4977fd40","isMergeCommit":false,"messageTitle":"Handle erroneous file format","messageBody":"Checks the length of the parsed result for each line of the file read.\n\nIf the format is not correct, the line is skipped and a task will not be created.\n","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"9bc4f2861c3df0988a2c15d9ca515b86f7b80a2d","isMergeCommit":false,"messageTitle":"Change chatbot parser","messageBody":"Deadline and event now explicitly splits by their respective delimiters (/from, /to, /by)\n\nChange EXPECTED.txt to reflect this change\n","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":26}}},{"hash":"fd881e58c4df13ecc1383e75fb99b4bf3881b52c","isMergeCommit":false,"messageTitle":"Create a DateParser class","messageBody":"Create a date parser class to handle parsing dates given by the user and the date stored in the file\n\nDateParser also handles displaying the date and converting the date to a string that can be stored on file\n","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":8}}},{"hash":"c55784b0d37afbaa71eb741aa4020b3b715ab2c7","isMergeCommit":false,"messageTitle":"Update testing for date time","messageBody":"Updated the Event class and its relevant methods to use LocalDateTime.\n\nUpdate EXPECTED.TXT to reflect the new changes in using datetime.\n","fileTypesAndContributionMap":{"txt":{"insertions":23,"deletions":7},"java":{"insertions":31,"deletions":17}}},{"hash":"63c693179f7ff1896e9d1f9db5da309ebafc9397","isMergeCommit":false,"messageTitle":"Update invalid date message","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}},{"hash":"7b675555066fdc31efc270377181408cfb945632","isMergeCommit":false,"messageTitle":"Create Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":94}}}]},{"date":"2023-08-31","commitResults":[{"hash":"62381d7d0118ac71027051190a1a765db5d8cea1","isMergeCommit":false,"messageTitle":"Abstract Parser, TaskList, *Command, Ui","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":526,"deletions":374},"bat":{"insertions":1,"deletions":0}}},{"hash":"1cd986d39167380eeff527add923f420aeb0c3de","isMergeCommit":false,"messageTitle":"Separate files into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":3},"bat":{"insertions":8,"deletions":4}}},{"hash":"2fac0abc23b246a723cb71dc884a1d604986971b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b48974c927d56d36eb96be316db9ce0372ef35d3","isMergeCommit":false,"messageTitle":"Add gradle checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"8435509fbc4121b9229f7f17ab085029b8d0f61e","isMergeCommit":false,"messageTitle":"Add skeleton for gradle test","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"4655853ad6015f9f1c92e8be53f0d2bb2c928794","isMergeCommit":false,"messageTitle":"JUnit test for Parser, Ui, TaskList","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":411,"deletions":23}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d08f248a7034d84c23b523fdf1c263fca9f159c7","isMergeCommit":false,"messageTitle":"Update error messages","messageBody":"Update invalid date error messages for event and deadline.\n\nTrim and strip multiline error message in DukeException to standardize error printing\n\nUpdated EXPECTED.TXT to reflect these changes.\n","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":12}}},{"hash":"0fd0f2bfa68ebda53aa4cd56afcbdecda1bf0122","isMergeCommit":false,"messageTitle":"Add find function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":30}}},{"hash":"871a4c83259aab2408b1ea4668d2ba0fe1e776bc","isMergeCommit":false,"messageTitle":"Javadocs for all the necessary methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":375,"deletions":5}}},{"hash":"404cddd3fc913514a5c7000c143858734947bb49","isMergeCommit":false,"messageTitle":"Updated javadocs for some variables.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"510cac062d527e9b6c4cacd1470dafaba333039f","isMergeCommit":false,"messageTitle":"Fix errors thrown by javadoc","messageBody":"import necessary dependencies to allow @link to detect the correct class.\n","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4},"java":{"insertions":6,"deletions":3}}},{"hash":"783600d5ecea90ba05d998bb816ed0986916761c","isMergeCommit":false,"messageTitle":"Javadoc for DukeException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":8}}},{"hash":"ee80c826ead605eb32774d5f08db9b500235a0bd","isMergeCommit":false,"messageTitle":"Format according to code standard","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4},"java":{"insertions":150,"deletions":102}}},{"hash":"a38ffa04a2b046a0f25d31b9f4107b443eec1230","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"38cc909ad5ea9f4486e0d1cdda954e8d70c1588a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1a608c54e49cfffa33cf412f52a6f62cc3e575f2","isMergeCommit":false,"messageTitle":"Javadocs for Find Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":10}}},{"hash":"d661a794e9266a5d8c0588ba4fa1fa0d78c5172b","isMergeCommit":false,"messageTitle":"Bug fix and tidy javadocs","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"McNaBry":{"java":1899,"md":0,"fxml":0,"sh":0,"bat":8,"gradle":7,"txt":47}},"authorContributionVariance":{"McNaBry":182847.39},"authorDisplayNameMap":{"McNaBry":"CS2103T-W08-3 BRYA.. YAN"}} +{"authorDailyContributionsMap":{"McNaBry":[{"date":"2023-08-20","commitResults":[{"hash":"1004ea0c58f4ece776e9e79e4234c7387e6d4489","isMergeCommit":false,"messageTitle":"Chatbot initial skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":6}}},{"hash":"97272f714aa57f7e108524c39f575de588fd9fee","isMergeCommit":false,"messageTitle":"chatbot echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":4}}},{"hash":"62d71382dc65544338afde5a448e8938c10ccfba","isMergeCommit":false,"messageTitle":"chatbot storage and listing function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":2}}},{"hash":"3f753ca68e7017765f25592e2f982f2bd564ab5d","isMergeCommit":false,"messageTitle":"chatbot marks tasks as done/undone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":11}}},{"hash":"11bbcce1680aa85cb08dfcd1a8e3ea686cc85689","isMergeCommit":false,"messageTitle":"support for todo, event \u0026 deadline","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":23}}}]},{"date":"2023-08-21","commitResults":[{"hash":"395a8876bd71d90e76afea9475527b72c78f0ce0","isMergeCommit":false,"messageTitle":"added coloring for task type","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":12}}},{"hash":"e91017b68b510c7fdd169ee07638fee89a8e458f","isMergeCommit":false,"messageTitle":"add testing for level 0-4","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"4e7d04b5080b3f504467564d37fa8b30c2404406","isMergeCommit":false,"messageTitle":"error handling for invalid command and argument for mark/unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":7}}},{"hash":"e6c139badc6c0b47bd7d17294329662bd15748a7","isMergeCommit":false,"messageTitle":"add error handling for invalid task creation","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":114,"deletions":33}}},{"hash":"77e6be3d8175d7bdd582d4e8e05baf865cbef896","isMergeCommit":false,"messageTitle":"expanded scope of testing to include errors","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":13,"deletions":0}}},{"hash":"a6f24523824e7c640c29fc4391269798ac1f734b","isMergeCommit":false,"messageTitle":"add test to mark deadline and event","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1}}},{"hash":"57f920ee34ae8f46afd52e0ca2d6220a4eddab3b","isMergeCommit":false,"messageTitle":"Replace task array with arrayList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":14}}},{"hash":"6723175540fd4aac069f05c214887ae711f1bd68","isMergeCommit":false,"messageTitle":"Add delete task function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"java":{"insertions":45,"deletions":5}}}]},{"date":"2023-08-28","commitResults":[{"hash":"82b1f28eeae7bbfa37ec28a1c71f4be02b30fe62","isMergeCommit":false,"messageTitle":"Add string representation for each task when saved to file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":3}}}]},{"date":"2023-08-29","commitResults":[{"hash":"97f982e6c10ab5f1037957102ec0fd06739ac3a0","isMergeCommit":false,"messageTitle":"Add save tasks feature","messageBody":"Chatbot now writes the list of tasks to a file when a new task is added, deleted or marked/unmarked.\n\nChatbot also reads from the file when starting and loads the tasks list.\n\nEXPECTED.txt is updated to handle the new changes.\n","fileTypesAndContributionMap":{"java":{"insertions":139,"deletions":36}}},{"hash":"c4ec87d977c3981e66e1d0443adcbecb4977fd40","isMergeCommit":false,"messageTitle":"Handle erroneous file format","messageBody":"Checks the length of the parsed result for each line of the file read.\n\nIf the format is not correct, the line is skipped and a task will not be created.\n","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"9bc4f2861c3df0988a2c15d9ca515b86f7b80a2d","isMergeCommit":false,"messageTitle":"Change chatbot parser","messageBody":"Deadline and event now explicitly splits by their respective delimiters (/from, /to, /by)\n\nChange EXPECTED.txt to reflect this change\n","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":26}}},{"hash":"fd881e58c4df13ecc1383e75fb99b4bf3881b52c","isMergeCommit":false,"messageTitle":"Create a DateParser class","messageBody":"Create a date parser class to handle parsing dates given by the user and the date stored in the file\n\nDateParser also handles displaying the date and converting the date to a string that can be stored on file\n","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":8}}},{"hash":"c55784b0d37afbaa71eb741aa4020b3b715ab2c7","isMergeCommit":false,"messageTitle":"Update testing for date time","messageBody":"Updated the Event class and its relevant methods to use LocalDateTime.\n\nUpdate EXPECTED.TXT to reflect the new changes in using datetime.\n","fileTypesAndContributionMap":{"txt":{"insertions":23,"deletions":7},"java":{"insertions":31,"deletions":17}}},{"hash":"63c693179f7ff1896e9d1f9db5da309ebafc9397","isMergeCommit":false,"messageTitle":"Update invalid date message","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":3}}},{"hash":"7b675555066fdc31efc270377181408cfb945632","isMergeCommit":false,"messageTitle":"Create Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":94}}}]},{"date":"2023-08-31","commitResults":[{"hash":"62381d7d0118ac71027051190a1a765db5d8cea1","isMergeCommit":false,"messageTitle":"Abstract Parser, TaskList, *Command, Ui","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":526,"deletions":374},"bat":{"insertions":1,"deletions":0}}},{"hash":"1cd986d39167380eeff527add923f420aeb0c3de","isMergeCommit":false,"messageTitle":"Separate files into packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":121,"deletions":3},"bat":{"insertions":8,"deletions":4}}},{"hash":"2fac0abc23b246a723cb71dc884a1d604986971b","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b48974c927d56d36eb96be316db9ce0372ef35d3","isMergeCommit":false,"messageTitle":"Add gradle checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":6,"deletions":1}}},{"hash":"8435509fbc4121b9229f7f17ab085029b8d0f61e","isMergeCommit":false,"messageTitle":"Add skeleton for gradle test","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"4655853ad6015f9f1c92e8be53f0d2bb2c928794","isMergeCommit":false,"messageTitle":"JUnit test for Parser, Ui, TaskList","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":411,"deletions":23}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d08f248a7034d84c23b523fdf1c263fca9f159c7","isMergeCommit":false,"messageTitle":"Update error messages","messageBody":"Update invalid date error messages for event and deadline.\n\nTrim and strip multiline error message in DukeException to standardize error printing\n\nUpdated EXPECTED.TXT to reflect these changes.\n","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":12}}},{"hash":"0fd0f2bfa68ebda53aa4cd56afcbdecda1bf0122","isMergeCommit":false,"messageTitle":"Add find function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":99,"deletions":30}}},{"hash":"871a4c83259aab2408b1ea4668d2ba0fe1e776bc","isMergeCommit":false,"messageTitle":"Javadocs for all the necessary methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":375,"deletions":5}}},{"hash":"404cddd3fc913514a5c7000c143858734947bb49","isMergeCommit":false,"messageTitle":"Updated javadocs for some variables.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":4}}},{"hash":"510cac062d527e9b6c4cacd1470dafaba333039f","isMergeCommit":false,"messageTitle":"Fix errors thrown by javadoc","messageBody":"import necessary dependencies to allow @link to detect the correct class.\n","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4},"java":{"insertions":6,"deletions":3}}},{"hash":"783600d5ecea90ba05d998bb816ed0986916761c","isMergeCommit":false,"messageTitle":"Javadoc for DukeException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":8}}},{"hash":"ee80c826ead605eb32774d5f08db9b500235a0bd","isMergeCommit":false,"messageTitle":"Format according to code standard","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4},"java":{"insertions":150,"deletions":102}}},{"hash":"a38ffa04a2b046a0f25d31b9f4107b443eec1230","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"38cc909ad5ea9f4486e0d1cdda954e8d70c1588a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1a608c54e49cfffa33cf412f52a6f62cc3e575f2","isMergeCommit":false,"messageTitle":"Javadocs for Find Command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":10}}},{"hash":"d661a794e9266a5d8c0588ba4fa1fa0d78c5172b","isMergeCommit":false,"messageTitle":"Bug fix and tidy javadocs","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"15a0f45a25bbbbd01cf5e51a2434cad7845a8d97","isMergeCommit":false,"messageTitle":"Enabled checkstyle","messageBody":"","tags":["A-Checkstyle"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"McNaBry":{"java":1899,"md":0,"fxml":0,"sh":0,"bat":8,"gradle":7,"txt":47}},"authorContributionVariance":{"McNaBry":160866.98},"authorDisplayNameMap":{"McNaBry":"CS2103T-W08-3 BRYA.. YAN"}} diff --git a/NereusWB922_ip_master/authorship.json b/NereusWB922_ip_master/authorship.json index 85394894..c9c7a066 100644 --- a/NereusWB922_ip_master/authorship.json +++ b/NereusWB922_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":"NereusWB922"},"content":" mainClass.set(\"corgi.Corgi\")","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":"NereusWB922"},"content":" archiveBaseName \u003d \"corgi\"","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":{"NereusWB922":2,"-":40}},{"path":"src/main/java/corgi/Corgi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.CommandExecutionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.CommandParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.InvalidCommandFormatException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.InvalidCommandTypeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"public class Corgi {","lastModifiedDate":"2023-08-22"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" private Storage\u003cTask\u003e storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" Corgi bot \u003d new Corgi();","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" bot.start();","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * Constructs new Corgi chatbot with an empty task list.","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" public Corgi() {","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" this.storage \u003d new Storage\u003c\u003e(new TaskParser(), \"./data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" if (tasks.size() \u003e 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" this.ui.showTasksLoaded(tasks.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" * Starts the chatbot - Corgi.","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" public void start() {","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" this.ui.setScanner(sc);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" this.ui.showIntro();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" while(!isExit) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" String userInput \u003d this.ui.readCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" if (userInput.equals(\"\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" continue;","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" this.ui.showStartLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" Command cmd \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" cmd \u003d new CommandParser().parse(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" cmd.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" isExit \u003d cmd.isExit();","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" } catch (InvalidCommandFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" this.ui.showError(e.getClass().getSimpleName(), e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" } catch (InvalidCommandTypeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" // Todo: Print all valid commands","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" this.ui.showError(e.getClass().getSimpleName(), e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" } catch (CommandExecutionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" this.ui.showError(e.getClass().getSimpleName(), e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" this.ui.showEndLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" sc.close();","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":80}},{"path":"src/main/java/corgi/commands/AddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to add a task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * This command adds a specified task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * The type of task (todo, deadline, or event) is determined by the command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"public class AddTaskCommand extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" private Task target;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * The type of task (todo, deadline, or event) being added.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" private String taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new AddTaskCommand instance with the specified task and command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @param target The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @param type The type of command (CommandType.TODO, CommandType.DEADLINE, or CommandType.EVENT).","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" public AddTaskCommand(Task target, CommandType type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" super(false, type);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" this.target \u003d target;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" if (type \u003d\u003d CommandType.TODO) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" this.taskType \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" } else if (type \u003d\u003d CommandType.DEADLINE) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" this.taskType \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" this.taskType \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by adding the specified task to the task list, saving the updated list to storage,","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" * and displaying a message to the user indicating that the task has been added.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to which the task should be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (if applicable).","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" list.add(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" ui.showTaskAdded(this.taskType, target.toString(), list.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":56}},{"path":"src/main/java/corgi/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * A flag indicating whether this command should exit the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" private CommandType type;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new Command instance with the specified exit flag and command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * @param isExit The flag indicating whether this command should exit the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" public Command(boolean isExit, CommandType type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" * Executes the command, performing its intended action on the provided task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * user interface, and storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to perform the command action on.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (if applicable).","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * @throws CommandExecutionException If an error occurs during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" public abstract void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) throws CommandExecutionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" * Checks whether this command should exit the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" * @return True if this command should exit, else false.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" return this.isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" * Gets the type of this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" * @return The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" public CommandType getCommandType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" return this.type;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":58}},{"path":"src/main/java/corgi/commands/CommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Parent exception class for chatbot command.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class CommandException extends Exception{","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new CommandException using provided error message.","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg Error message provided","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public CommandException(String msg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/commands/CommandExecutionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Represents an exception that is thrown when an error occurs during the execution of a command.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" * It is used to indicate that the execution of a command has failed.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"public class CommandExecutionException extends CommandException{","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new CommandExecutionException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the cause of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" public CommandExecutionException(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":16}},{"path":"src/main/java/corgi/commands/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Types of commands that can be given to the Corgi chat bot.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" MARK(\"mark [task no.]\"), ","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" UNMARK(\"unmark [task no.]\"), ","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" TODO(\"todo [task]\"), ","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" DEADLINE(\"deadline [task] /by [yyyy-mm-dd]\"), ","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" EVENT(\"event [task] /from [yyyy-mm-dd] /to [yyyy-mm-dd]\"), ","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" BYE(\"bye\"), ","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" LIST(\"list\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" DELETE(\"delete [task no.]\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" DATE(\"date [yyyy-mm-dd]\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" FIND(\"find [keyword]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" private final String commandFormat;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new CommandType with the given command format.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" * @param commandFormat The command format","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" CommandType(String commandFormat) {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" this.commandFormat \u003d commandFormat;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * Retrieves the corresponding CommandType enum value based on the given command string.","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * @param commandStr The command string to match","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" * @return The matching CommandType enum value","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" * @throws InvalidCommandException if the command string is not recognized","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" public static CommandType getCommandType(String commandStr) throws InvalidCommandException{","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" switch (commandStr.toLowerCase()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" case \"mark\":","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" return MARK;","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" return UNMARK;","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" case \"todo\":","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" return TODO;","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" return DEADLINE;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" case \"event\":","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" return EVENT;","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" case \"bye\":","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" return BYE;","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" case \"list\":","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" return LIST;","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" case \"delete\":","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" return DELETE;","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" case \"date\":","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" return DATE;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" return FIND;","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" default:","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" * Retrieves the command format string for this CommandType.","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" * @return The command format string","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" public String getCommandFormat() {","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" return this.commandFormat;","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":72}},{"path":"src/main/java/corgi/commands/DeleteTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskListIndexOutOfBoundsException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * This command deletes a task at the specified index from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"public class DeleteTaskCommand extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" private int targetIdx;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new DeleteTaskCommand instance with the specified target index.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * @param targetIdx The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" public DeleteTaskCommand(int targetIdx) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" super(false, CommandType.DELETE);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" this.targetIdx \u003d targetIdx;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by deleting the task at the specified index from the task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" * saving the updated list to storage, and displaying a message to the user indicating ","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * that the task has been deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list from which the task should be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (if applicable).","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * @throws CommandExecutionException If an error occurs during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) throws CommandExecutionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" String targetTaskInfo \u003d list.getTaskInfo(targetIdx);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" list.remove(targetIdx);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" ui.showTaskDeleted(targetTaskInfo, list.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" } catch (TaskListIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" throw new CommandExecutionException(\"Invalid index provided!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":50}},{"path":"src/main/java/corgi/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * This command terminates the application and provides an exit message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"public class ExitCommand extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new ExitCommand instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" super(true, CommandType.BYE);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by displaying an exit message to the user, indicating that the application is terminating.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list (not used in this command).","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying the exit message.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (not used in this command).","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" ui.showExitMsg();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":32}},{"path":"src/main/java/corgi/commands/FindTasksContainKeywordCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to find tasks containing a specific keyword in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"public class FindTasksContainKeywordCommand extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * The predicate used to filter tasks by keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" private Predicate\u003cTask\u003e predicate;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * The target keyword for finding tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" private final String target;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new FindTasksContainKeywordCommand instance with the target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @param target The target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" public FindTasksContainKeywordCommand(String target) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" super(false, CommandType.FIND);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" this.target \u003d target;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" this.predicate \u003d t -\u003e t.contains(target);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by filtering the task list based on the given predicate to find tasks containing specific keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * It then displays the filtered tasks to the user or a message indicating that no matching tasks were found.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to filter.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying filtered tasks or messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (not used in this command).","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" TaskList tasksContainKeyword \u003d list.filter(predicate);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" if (tasksContainKeyword.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" ui.showNoTaskContainsKeyword(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" ui.showTasksContainKeyword(this.target, tasksContainKeyword.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":53}},{"path":"src/main/java/corgi/commands/FindTasksOnDateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to find tasks on a specific date in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" * This command filters the task list based on a given predicate to find tasks on the specified date.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"public class FindTasksOnDateCommand extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * The predicate used to filter tasks by date.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" private Predicate\u003cTask\u003e predicate;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * The target date for finding tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" private final LocalDate target;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new FindTasksOnDateCommand instance with the target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * @param target The target date","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" public FindTasksOnDateCommand(LocalDate target) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" super(false, CommandType.DATE);","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" this.target \u003d target;","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" this.predicate \u003d t -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" if (t instanceof Deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" Deadline d \u003d (Deadline) t;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" return d.isHappeningOnDate(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" } else if (t instanceof Event) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" Event e \u003d (Event) t;","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" return e.isHappeningOnDate(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" };","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by filtering the task list based on the given predicate to find tasks on the specified date.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" * It then displays the filtered tasks to the user or a message indicating that no tasks were found on the date.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to filter.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying filtered tasks or messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (not used in this command).","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" TaskList tasksOnDate \u003d list.filter(predicate);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" String outputDate \u003d this.target.format(Task.DATE_OUTPUT_FORMATTER);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" if (tasksOnDate.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" ui.showNoTaskOnDate(outputDate);;","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" ui.showTasksOnDate(outputDate, tasksOnDate.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":70}},{"path":"src/main/java/corgi/commands/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Exception thrown when an invalid command is provided.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class InvalidCommandException extends CommandException{","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new InvalidCommandException with a default error message.","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" super(\"Invalid command is provided!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":14}},{"path":"src/main/java/corgi/commands/ListTasksCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to list tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * This command retrieves and displays the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"public class ListTasksCommand extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new ListTasksCommand instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" public ListTasksCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" super(false, CommandType.LIST);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by retrieving and displaying the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * It shows either the list of tasks or a message indicating that no tasks are in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying the task list or a message.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (not used in this command).","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" ui.showNoTaskInList();","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" ui.showTaskList(list.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":37}},{"path":"src/main/java/corgi/commands/MarkTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskListIndexOutOfBoundsException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskStatusException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to mark a task as done or undone in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" * This command updates the status of a task at the specified index in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"public class MarkTaskCommand extends Command{","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" * The index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" private int index;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * The new status of the task (true for done, false for undone).","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" private boolean status;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new MarkTaskCommand instance with the specified index, status, and command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @param index The index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" * @param status The new status of the task (true for done, false for undone).","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * @param type The type of command (CommandType.MARK_DONE or CommandType.MARK_UNDONE).","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" public MarkTaskCommand(int index, boolean status, CommandType type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" super(false, type);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" this.index \u003d index; ","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" this.status \u003d status;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by marking the task at the specified index with the new status,","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" * saving the updated list to storage, and displaying a message to the user indicating the task\u0027s status change.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to be updated.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (if applicable).","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" * @throws CommandExecutionException If an error occurs during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) throws CommandExecutionException{","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" try { ","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" list.mark(this.index, this.status);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" if (status) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" ui.showTaskDone(list.getTaskInfo(this.index));","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" ui.showTaskUndone(list.getTaskInfo(this.index));","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" } catch (TaskListIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" throw new CommandExecutionException(\"Invalid index provided!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" } catch (TaskStatusException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" throw new CommandExecutionException(\"The task is already in that status!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":64}},{"path":"src/main/java/corgi/parsers/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.AddTaskCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.CommandType;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.DeleteTaskCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.FindTasksContainKeywordCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.FindTasksOnDateCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.ListTasksCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.MarkTaskCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" * A parser class for interpreting user input and generating corresponding Command objects.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":"public class CommandParser extends Parser\u003cCommand\u003e{","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * Parses the given full command string and generates the corresponding Command object.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * @param fullCommand The full user input command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" * @return The Command object representing the parsed command.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * @throws InvalidCommandFormatException If the command format is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" * @throws InvalidCommandTypeException If the command type is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" public Command parse(String fullCommand) throws InvalidCommandFormatException, InvalidCommandTypeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" String[] inputs \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" String cmdStr \u003d inputs[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" CommandType cmd;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" cmd \u003d CommandType.getCommandType(cmdStr);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandTypeException(\"Invalid Command!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" Command command \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" switch (cmd) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" case BYE:","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" command \u003d newExitCommand(inputs);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" command \u003d newListCommand(inputs);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" command \u003d newMarkCommand(inputs, true);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" case UNMARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" command \u003d newMarkCommand(inputs, false);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" command \u003d newAddCommand(inputs, cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" command \u003d newAddCommand(inputs, cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" command \u003d newAddCommand(inputs, cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" case DELETE:","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" command \u003d newDeleteCommand(inputs);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" case DATE:","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" command \u003d newDateCommand(inputs);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" command \u003d newFindCommand(inputs);","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" return command;","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" private Command newExitCommand(String[] inputs) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003e 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is needed!\" + \"\\nFormat: \" + ","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" CommandType.BYE.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" private Command newListCommand(String[] inputs) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003e 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is needed!\" + \"\\nFormat: \" + ","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" CommandType.LIST.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" return new ListTasksCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" private Command newMarkCommand(String[] inputs, boolean status) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is provided!\" + \"\\nFormat: \" + ","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" (status ? CommandType.MARK.getCommandFormat() : CommandType.UNMARK.getCommandFormat()));","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" int index \u003d Integer.parseInt(inputs[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" return new MarkTaskCommand(index, status, ","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":" status ? CommandType.MARK : CommandType.UNMARK);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Please provide a valid task number!\" + \"\\nFormat: \" + ","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" (status ? CommandType.MARK.getCommandFormat() : CommandType.UNMARK.getCommandFormat()));","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":" private Command newDeleteCommand(String[] inputs) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is provided!\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" CommandType.DELETE.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"NereusWB922"},"content":" } ","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":" int index \u003d Integer.parseInt(inputs[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"NereusWB922"},"content":" return new DeleteTaskCommand(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"NereusWB922"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Please provide a valid task number!\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":" CommandType.DELETE.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" private Command newDateCommand(String[] inputs) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is provided!\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" CommandType.DATE.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" LocalDate target \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"NereusWB922"},"content":" String dateStr \u003d inputs[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"NereusWB922"},"content":" target \u003d LocalDate.parse(dateStr, Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"NereusWB922"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Invalid date format!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"NereusWB922"},"content":" return new FindTasksOnDateCommand(target);","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"NereusWB922"},"content":" private Command newFindCommand(String[] inputs) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is provided!\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" CommandType.FIND.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" String keyword \u003d inputs[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"NereusWB922"},"content":" return new FindTasksContainKeywordCommand(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":" private Command newAddCommand(String[] inputs, CommandType type) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is provided!\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"NereusWB922"},"content":" type.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"NereusWB922"},"content":" String taskInfo \u003d inputs[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"NereusWB922"},"content":" if (type \u003d\u003d CommandType.TODO) {","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"NereusWB922"},"content":" Task target \u003d new ToDo(taskInfo);","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"NereusWB922"},"content":" return new AddTaskCommand(target, CommandType.TODO);","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"NereusWB922"},"content":" } else if (type \u003d\u003d CommandType.DEADLINE) {","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"NereusWB922"},"content":" // todo: check number of /by","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"NereusWB922"},"content":" String[] deadlineInfos \u003d taskInfo.split(\" /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"NereusWB922"},"content":" if (deadlineInfos.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Missing deadline!\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"NereusWB922"},"content":" type.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"NereusWB922"},"content":" String deadlineDesc \u003d deadlineInfos[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"NereusWB922"},"content":" LocalDate by \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"NereusWB922"},"content":" by \u003d LocalDate.parse(deadlineInfos[1], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"NereusWB922"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Invalid date format!\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"NereusWB922"},"content":" type.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"NereusWB922"},"content":" Task target \u003d new Deadline(deadlineDesc, by);","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"NereusWB922"},"content":" return new AddTaskCommand(target, CommandType.DEADLINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"NereusWB922"},"content":" // todo: check number of /from, /to, check order","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"NereusWB922"},"content":" String[] eventInfos \u003d taskInfo.split(\" /from \");","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"NereusWB922"},"content":" if (eventInfos.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Missing /from argument.\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"NereusWB922"},"content":" type.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"NereusWB922"},"content":" } else if (eventInfos.length \u003e 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Only one /from argument is needed.\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"NereusWB922"},"content":" type.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"NereusWB922"},"content":" String eventDesc \u003d eventInfos[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"NereusWB922"},"content":" String[] eventDuration \u003d eventInfos[1].split(\" /to \");","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"NereusWB922"},"content":" if (eventDuration.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Missing /to argument!\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"NereusWB922"},"content":" type.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"NereusWB922"},"content":" } else if (eventDuration.length \u003e 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Only one /to argument is needed.\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"NereusWB922"},"content":" type.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"NereusWB922"},"content":" LocalDate from \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"NereusWB922"},"content":" LocalDate to \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"NereusWB922"},"content":" from \u003d LocalDate.parse(eventDuration[0], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"NereusWB922"},"content":" to \u003d LocalDate.parse(eventDuration[1], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"NereusWB922"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Invalid date format!\" + \"\\nFormat: \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"NereusWB922"},"content":" type.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":231,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":232,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"NereusWB922"},"content":" Task target \u003d new Event(eventDesc, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"NereusWB922"},"content":" return new AddTaskCommand(target, CommandType.EVENT);","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":238}},{"path":"src/main/java/corgi/parsers/InvalidCommandFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Represents an exception that is thrown when an error occurs due to an invalid command format.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class InvalidCommandFormatException extends InvalidParsingFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new InvalidCommandFormatException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the cause of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public InvalidCommandFormatException(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/parsers/InvalidCommandTypeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Represents an exception that is thrown when an error occurs due to an invalid command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class InvalidCommandTypeException extends InvalidParsingTypeException{","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new InvalidCommandTypeException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the cause of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public InvalidCommandTypeException(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/parsers/InvalidParsingFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Custom exception class for parsing errors related to invalid formats.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class InvalidParsingFormatException extends ParsingException{","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new InvalidParsingFormatException with the specified error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the invalid parsing format error.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public InvalidParsingFormatException(String msg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/parsers/InvalidParsingTypeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Custom exception class for parsing errors related to invalid types.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class InvalidParsingTypeException extends ParsingException{","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new InvalidParsingTypeException with the specified error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the invalid parsing type error.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public InvalidParsingTypeException(String msg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/parsers/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * The Parser abstract class defines a common interface for parsing strings","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" * and converting them into objects of a specified type.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * @param \u003cT\u003e The type of object that the parser can parse strings into.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"public abstract class Parser\u003cT\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * Parses the given string and converts it into an object of type T.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" * @param s The string to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" * @return An object of type T parsed from the input string.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" public abstract T parse(String s) throws ParsingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":17}},{"path":"src/main/java/corgi/parsers/ParsingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Custom exception class to handle parsing errors.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class ParsingException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new ParsingException with the specified error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param message The error message describing the parsing error.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public ParsingException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" } ","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/parsers/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" * The TaskParser class extends the abstract Parser class and provides","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" * the implementation to parse string representations of tasks and","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * convert them into Task objects.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"public class TaskParser extends Parser\u003cTask\u003e{","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * The separator used to split task infos in the input string.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" public static final String SEPARATOR \u003d \" | \";","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" * Parses the given string representation of a task and converts it into a Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * @param s The string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" public Task parse(String s) throws ParsingException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" String[] infos \u003d s.split(Pattern.quote(SEPARATOR));","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" if (infos.length \u003c 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Invalid task format!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" String taskType \u003d infos[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" String statusStr \u003d infos[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" String desc \u003d infos[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" boolean status \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" if (statusStr.equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" status \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" } else if (statusStr.equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" status \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Task status should be 0 or 1!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" switch(taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" if (infos.length !\u003d 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Wrong format for ToDo task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" task \u003d new ToDo(status, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" if (infos.length !\u003d 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Wrong format for Deadline task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" LocalDate by \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" by \u003d LocalDate.parse(infos[3], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Wrong format for date!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" task \u003d new Deadline(status, desc, by);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" if (infos.length !\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Wrong format for Event task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" LocalDate from \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" LocalDate to \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" from \u003d LocalDate.parse(infos[3], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" to \u003d LocalDate.parse(infos[4], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Wrong format for date!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" task \u003d new Event(status, desc, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingTypeException(\"Invalid task type!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":98}},{"path":"src/main/java/corgi/storage/Storable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * The Storable interface defines methods for converting objects to storable strings","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" * and parsing storable strings to objects.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * @param \u003cT\u003e The type of object that the storable string can be parsed into.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"public interface Storable\u003cT\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * Converts the object to a storable string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" * @return The storable string representation of the object.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" public String toStorableString();","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":16}},{"path":"src/main/java/corgi/storage/StorableList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * An interface representing a list of storable items.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" * @param \u003cT\u003e The type of storable items that the list contains.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"public interface StorableList\u003cT extends Storable\u003cT\u003e\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * Retrieves a storable string representation of the items in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" * @return The storable string representation of the items.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" public String getStorableString();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.ParsingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" * A class for storing and loading objects.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * @param \u003cT\u003e The type of object being stored and loaded.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"public class Storage\u003cT extends Storable\u003cT\u003e\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" private Parser\u003cT\u003e parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * Constructs a Storage instance with the given parser and file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @param parser The parser for converting objects to storable strings.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @param filePath The file path where data will be stored or loaded.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" public Storage(Parser\u003cT\u003e parser, String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" this.parser \u003d parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" // Check whether dir exists, create one if not","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" File dir \u003d new File(filePath).getParentFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" boolean success \u003d dir.mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" if (!success) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"An error occurred when creating directory: \" + dir.getAbsolutePath());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" // Check whether file exists, create one if not","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" boolean success \u003d file.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" if (!success) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"An error occurred when creating file: \" + file.getAbsolutePath());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" System.out.println(\"No previous data file found. Created a new data file at: \" ","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" + file.getAbsolutePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"An error occurred when creating file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" * Saves a list of storable items to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" * @param list The list of storable items to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" public void save(StorableList\u003cT\u003e list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(this.filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" writer.write(list.getStorableString());","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"An error occurred when saving data: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" * Loads a list of items from a file and returns them as a List.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" * @return A List containing the loaded items.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" public List\u003cT\u003e load() {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" List\u003cT\u003e items \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" int skipped \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(this.filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" T item \u003d parser.parse(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" if (item !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" items.add(item);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" } catch (ParsingException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" skipped +\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"A parsing error occurred when loading data: \" + e.getMessage() + ","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" \"\\nCorrupted data: \" + line + \" (Skipped)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"An error occurred when loading data: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" if (skipped \u003e 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" System.out.println(\"Skipped \" + skipped + \" lines with corrupted data.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" return items;","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":107}},{"path":"src/main/java/corgi/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Deadline task, a type of task that need to be done before a specific date/time.","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new deadline task with the given description and deadline. ","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" * @param by The deadline of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" public Deadline(String desc, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" super(false, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new deadline task with the given status, description, and deadline. ","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @param status The status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" public Deadline(boolean status, String desc, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" super(status, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * Checks if the deadline task is happening on the specified target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" * @param targetDate The date to check against the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" * @return True if the task\u0027s deadline matches the target date, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" public boolean isHappeningOnDate(LocalDate targetDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" return this.by.isEqual(targetDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * Converts the deadline task to a storable string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" * @return A string representing the deadline task in a storable format.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" public String toStorableString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" String[] infos \u003d {\"D\", this.status ? \"1\" : \"0\", this.desc, this.by.format(Task.DATE_INPUT_FORMATTER)};","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" return String.join(TaskParser.SEPARATOR, infos);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" * Returns a string representation of the deadline task.","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" * @return Task type, status icon, description and deadline of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(Task.DATE_OUTPUT_FORMATTER) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"NereusWB922":67}},{"path":"src/main/java/corgi/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Event task, a type of task that start at a specific date/time and ends at a specific date/time.","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" ","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new event with the given description and duration. ","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the event","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * @param from The start date/time of the event","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * @param to The end date/time of the event","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" public Event(String desc, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" super(false, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new event task with the given status, description, start date, and end date.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * @param status The status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * @param from The start date of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" * @param to The end date of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" public Event(boolean status, String desc, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" super(status, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" * Checks if the event task is happening on the specified target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" * @param targetDate The date to check against the event duration.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" * @return True if the task\u0027s event duration includes the target date, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" public boolean isHappeningOnDate(LocalDate targetDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" return targetDate.isEqual(this.from) || targetDate.isEqual(this.to) ","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" || (targetDate.isAfter(this.from) \u0026\u0026 targetDate.isBefore(this.to));","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" * Converts the event task to a storable string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" * @return A string representing the event task in a storable format.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" public String toStorableString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" String[] infos \u003d {\"E\", this.status ? \"1\" : \"0\", this.desc, ","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" this.from.format(Task.DATE_INPUT_FORMATTER), this.to.format(Task.DATE_INPUT_FORMATTER)};","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" return String.join(TaskParser.SEPARATOR, infos);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" * Returns a string representation of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" * @return Task type, status icon, description, start date/time and end date/time of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" public String toString(){","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(DATE_OUTPUT_FORMATTER) ","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" + \" to: \" + this.to.format(DATE_OUTPUT_FORMATTER) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":75}},{"path":"src/main/java/corgi/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storable;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * Task class storing description and status.","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"public abstract class Task implements Storable\u003cTask\u003e{","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" protected String desc;","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" protected boolean status;","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public static final DateTimeFormatter DATE_INPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" public static final DateTimeFormatter DATE_OUTPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new task with its description. The task\u0027s initial status is set to not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * @param status The status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" public Task(boolean status, String desc) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" this.status \u003d status;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * Mark task as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" public void markAsDone() throws TaskStatusException{","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" if(this.status \u003d\u003d true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" throw new TaskStatusException(\"The task is already marked as done.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" this.status \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * Mark task as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" public void markAsNotDone() throws TaskStatusException{","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" if(this.status \u003d\u003d false) {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" throw new TaskStatusException(\"The task is already marked as not done.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" this.status \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * Returns an icon representing the status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" * @return An icon (\"X\" for done, \" \" for not done).","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" return (this.status ? \"X\" : \" \");","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" * Checks if the description of the task contains a specified keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" * @param keyword The keyword to search for within the task description.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" * @return True if the keyword is found in the description, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" return this.desc.contains(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" * @return Status icon and description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.desc;","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"NereusWB922":74}},{"path":"src/main/java/corgi/tasks/TaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Custom exception class to handle errors related to Task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class TaskException extends Exception{","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new ParsingException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the parsing error.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public TaskException(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.StorableList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * A class representing a list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" * This class implements the StorableList interface to provide methods for tasks storing.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"public class TaskList implements StorableList\u003cTask\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * Constructs a TaskList containing the given list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @param tasks The list of tasks to initialize the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * @param t The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" public void add(Task t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" * Removes a task at the specified index from the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * @throws TaskListIndexOutOfBoundsException If the index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" public void remove(int index) throws TaskListIndexOutOfBoundsException {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" if (!isValidIndex(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" throw new TaskListIndexOutOfBoundsException(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" * Marks a task\u0027s status as done or not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" * @param index The index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" * @param status The new status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" * @throws TaskListIndexOutOfBoundsException If the index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" * @throws TaskStatusException If task was already marked as the given status.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" public void mark(int index, boolean status) throws TaskListIndexOutOfBoundsException, TaskStatusException{","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" if (!isValidIndex(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" throw new TaskListIndexOutOfBoundsException(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" Task task \u003d this.tasks.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" if (status) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" * Checks if the provided index is valid within the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" * @param index The index to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" * @return True if the index is valid, otherwise false.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" public boolean isValidIndex(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" return index \u003e\u003d 0 \u0026\u0026 index \u003c this.tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" * Returns the number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" * @return The number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" public int size() {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" * Filters the tasks in the TaskList based on the given predicate.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" * @param predicate The predicate used to filter tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" * @return A new TaskList containing the filtered tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" public TaskList filter(Predicate\u003cTask\u003e predicate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" List\u003cTask\u003e filteredList \u003d this.tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" .stream()","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" .filter(predicate)","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" return new TaskList(filteredList);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" * Checks if the TaskList is empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" * @return True if the TaskList is empty, otherwise false.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":" return this.tasks.isEmpty();","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"NereusWB922"},"content":" * Retrieves a string representation of the task at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"NereusWB922"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"NereusWB922"},"content":" * @throws TaskListIndexOutOfBoundsException If the index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"NereusWB922"},"content":" public String getTaskInfo(int index) throws TaskListIndexOutOfBoundsException {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":" if (!isValidIndex(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"NereusWB922"},"content":" throw new TaskListIndexOutOfBoundsException(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"NereusWB922"},"content":" return this.tasks.get(index).toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" * Returns a storable string representation of all the TaskList\u0027s tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":" * @return The storable string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"NereusWB922"},"content":" public String getStorableString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"NereusWB922"},"content":" String storableString \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"NereusWB922"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"NereusWB922"},"content":" storableString +\u003d task.toStorableString() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"NereusWB922"},"content":" return storableString;","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"NereusWB922"},"content":" * Returns a string representation of task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"NereusWB922"},"content":" * @return The string representation of task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":" String s \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"NereusWB922"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" s +\u003d (i+1) + \") \" + this.tasks.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":" if (i \u003c this.tasks.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"NereusWB922"},"content":" s +\u003d \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":" return s;","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":165}},{"path":"src/main/java/corgi/tasks/TaskListIndexOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * An exception class representing an index out of bounds error specific to the TaskList class.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" * This exception is thrown when attempting to access or manipulate tasks using an invalid index.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"public class TaskListIndexOutOfBoundsException extends TaskException{","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Constructs a TaskListIndexOutOfBoundsException with the specified detail message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * @param msg The detail message indicating the cause of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" public TaskListIndexOutOfBoundsException(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * Constructs a TaskListIndexOutOfBoundsException with the specified invalid index.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * @param index The index that caused the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" public TaskListIndexOutOfBoundsException(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" super(Integer.toString(index));","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":25}},{"path":"src/main/java/corgi/tasks/TaskStatusException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Task status-related exception","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class TaskStatusException extends TaskException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new TaskStatusException with the specified error message.","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the specific task status error.","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public TaskStatusException(String msg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" * Todo task, a type of task without any date/time attached to it.","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" ","lastModifiedDate":"2023-08-22"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new todo task with the given description. The task\u0027s initial status is set to not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the todo task","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" public ToDo(String desc) {","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" super(false, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new todo task with the given status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * @param status The status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" public ToDo(boolean status, String desc) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" super(status, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" * Converts the todo task to a storable string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" * @return A string representing the to-do task in a storable format.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" public String toStorableString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" String[] infos \u003d {\"T\", this.status ? \"1\" : \"0\", this.desc};","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" return String.join(TaskParser.SEPARATOR, infos);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" * Returns a string representation of the todo task.","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" * @return Task type, status icon and description of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"NereusWB922":49}},{"path":"src/main/java/corgi/ui/ErrorMessage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * This class defines error messages for various exceptions in the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * It provides a mapping between exception class names and their corresponding error messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"public class ErrorMessage {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" * A mapping between exception class names and their corresponding error messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" public static final Map\u003cString, String\u003e mapper \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" static {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" mapper.put(\"InvalidCommandTypeException\",","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" \"Can\u0027t believe you\u0027re asking that! Grrr, what do you want now?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" mapper.put(\"InvalidCommandFormatException\",","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" \"Are you trying to confuse me with this nonsense? Try again hooman!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" mapper.put(\"CommandExecutionException\",","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" \"Argh, something went wrong! Bad hooman, what are you trying to do!?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":24}},{"path":"src/main/java/corgi/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.CommandType;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * The Ui class is responsible for managing the user interface and displaying messages, errors, and prompts.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" private final static String LOGO \u003d \" ____ ___ ____ ____ ___\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" + \" / ___/ _ \\\\| _ \\\\ / ___|_ _|\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" + \"| | | | | | |_) | | _ | |\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" + \"| |__| |_| | _ \u003c| |_| || |\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" + \" \\\\____\\\\___/|_| \\\\_\\\\\\\\____|___|\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" private final static String DIVIDER \u003d \"---------------------------------------------------------------------\";","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" private final static Map\u003cString, String\u003e errorMessage \u003d ErrorMessage.mapper;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * Display a message to the console.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" * @param s The message to display.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" private void println(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" System.out.println(s);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" * Display the application logo.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" public void showLogo() {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" this.println(LOGO);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" * Display the introductory message.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" public void showIntro() {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" this.showLogo();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Woof! I\u0027m Corgi!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" this.println(\"So, what\u0027s your wish this time, hooman?\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * Read a command from the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" * @return The command entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" return this.sc.nextLine().trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" * Set scanner object for reading command.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" * @param sc The scanner.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" public void setScanner(Scanner sc) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" * Display start line of chatbot message.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" public void showStartLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" this.println(\"\\n\" + DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" * Display end line of chatbot message.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" public void showEndLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" this.println(DIVIDER + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" * Display an error message associated with a specific exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" * @param exception The exception class name.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" public void showError(String exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Woof?! 🤬 \\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" this.println(errorMessage.getOrDefault(exception, ","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" \"Oh wonderful, you\u0027ve broken something. And guess what? I have \\nabsolutely no idea what happened either.\"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" + \"\\n\\n😇: \" + exception + \" occurred!\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" * Display error message associated with a specific exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" * Also display extra message in the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" * @param exception The exception class name.","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" * @param extraMsg The extra message.","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" public void showError(String exception, String extraMsg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" this.showError(exception);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" this.println(\"\\n😇: \" + extraMsg);","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" ","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" * Display the format of a specific command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" * @param c The specific command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" public void showCommandFormat(CommandType c) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Format: \" + c.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating a task has been added.","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" * @param type The type of task added.","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" * @param taskInfo Information about the added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" * @param currentListSize The current size of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":" public void showTaskAdded(String type, String taskInfo, int currentListSize) {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Woof, whatever. I\u0027ve added this \" + type + \":\\n\\n \" ","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" + taskInfo + \"\\n\\nNow you have \" + currentListSize + \" tasks in the list.🐾\");","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating tasks have been loaded from data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"NereusWB922"},"content":" public void showTasksLoaded(int size) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Successfully loaded \" + size + \" tasks!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"NereusWB922"},"content":" * Display a exit message.","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" public void showExitMsg() {","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Fine! Whatever! Just go away then! See if I care! huffs\");","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating no tasks occurred on target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"NereusWB922"},"content":" * @param date The target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"NereusWB922"},"content":" public void showNoTaskOnDate(String date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"NereusWB922"},"content":" this.println(\"No tasks or events are scheduled for \" + date + \".\");","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"NereusWB922"},"content":" * Display tasks that occurred on the target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"NereusWB922"},"content":" * @param date The target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"NereusWB922"},"content":" * @param tasksOnDate The tasks occurred on the target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"NereusWB922"},"content":" public void showTasksOnDate(String date, String tasksOnDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Here are the tasks and events happening on \" + date + \":\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":" this.println(tasksOnDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating no tasks containing target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"NereusWB922"},"content":" * @param keyword The target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"NereusWB922"},"content":" public void showNoTaskContainsKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":" this.println(\"No tasks containing keyword \\\"\" + keyword + \"\\\".\");","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" * Display tasks that contained the target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"NereusWB922"},"content":" * ","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"NereusWB922"},"content":" * @param keyword The target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"NereusWB922"},"content":" * @param tasksContainKeyword The tasks containing the target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"NereusWB922"},"content":" public void showTasksContainKeyword(String keyword, String tasksContainKeyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Here are the tasks containing keyword \\\"\" + keyword + \"\\\":\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"NereusWB922"},"content":" this.println(tasksContainKeyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating a task has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"NereusWB922"},"content":" * @param taskInfo Information about the added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"NereusWB922"},"content":" public void showTaskDone(String taskInfo) {","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Congratulations, I guess! You finally managed to do something right 🎉:\\n\" ","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"NereusWB922"},"content":" + \"\\n \" + taskInfo + \"\\n\"); ","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating a task has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"NereusWB922"},"content":" * @param taskInfo Information about the added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"NereusWB922"},"content":" public void showTaskUndone(String taskInfo) {","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Oh great, you\u0027ve undone something 🐕. Just like always:\\n\" ","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"NereusWB922"},"content":" + \"\\n \" + taskInfo + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating a task has been deleted and display current list size.","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"NereusWB922"},"content":" * @param taskInfo Information about the added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"NereusWB922"},"content":" * @param currentListSize Current size of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"NereusWB922"},"content":" public void showTaskDeleted(String taskInfo, int currentListSize) {","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Finally got rid of that task. Took you long enough... uninterested woof\\n\" ","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"NereusWB922"},"content":" + \"\\n \" + taskInfo + \"\\n\\nNow you have \" + currentListSize + \" tasks in the list.🐾\"); ","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"NereusWB922"},"content":" * Display a mesage indicating there is no task in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"NereusWB922"},"content":" public void showNoTaskInList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"NereusWB922"},"content":" this.println(\"If you haven\u0027t noticed, there\u0027s nothing here! No tasks to be found.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"NereusWB922"},"content":" * Display the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"NereusWB922"},"content":" * @param taskList","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"NereusWB922"},"content":" public void showTaskList(String taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"NereusWB922"},"content":" this.println(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":222}},{"path":"src/test/java/corgi/parsers/CommandParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"public class CommandParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" public void parse_invalidByeCommand_throwsInvalidCommandFormatException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" // Test the parsing of the \"bye\" command with arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"bye Corgi\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" public void parse_invalidMarkCommand_throwsInvalidCommandFormatException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" // Test the parsing of the \"mark\" command with an invalid argument","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"mark\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"mark abc\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"mark 1 2 3 4\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" public void parse_invalidUnmarkCommand_throwsInvalidCommandFormatException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" // Test the parsing of the \"mark\" command with an invalid argument","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"unmark\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"unmark abc\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"unmark 1 2 3 4\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" public void parse_invalidDeadlineCommand_throwsInvalidCommandFormatException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" // Test the parsing of the \"deadline\" command with an invalid argument","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"deadline\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"deadline Invalid deadline /by tomorrow\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" //Todo: Bug found: should count number of /by before start splitting.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" //assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"deadline Invalid deadline /by 2023-09-22 /by 2023-09-23\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"deadline /by 2023-09-22\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" public void parse_invalidEventCommand_throwsInvalidCommandFormatException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" // Test the parsing of the \"event\" command with an invalid argument","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"event\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"event Invalid event /from 2023-09-20\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"event Invalid event /to 2023-09-20\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e parser.parse(\"event Invalid event /to 2023-09-20 /to 2023-09-22\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":58}},{"path":"src/test/java/corgi/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" public void markAsDone_alreadyDoneTask_throwsTaskStatusException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" // Create todo, deadline, event with status initially marked as done","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" ToDo todo \u003d new ToDo(true, \"Test Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" Deadline deadline \u003d new Deadline(true, \"Test Deadline\", LocalDate.of(2023, 9, 22));","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" Event event \u003d new Event(true, \"Test Event\", LocalDate.of(2023, 9, 22), LocalDate.of(2023, 10, 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" // Attempt to mark them as done again and expect a TaskStatusException","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e todo.markAsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e deadline.markAsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e event.markAsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" public void markAsNotDone_alreadyNotDoneTask_throwsTaskStatusException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" // Create todo, deadline, event with status initially marked as undone","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" ToDo todo \u003d new ToDo(false, \"Test Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" Deadline deadline \u003d new Deadline(false, \"Test Deadline\", LocalDate.of(2023, 9, 22));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" Event event \u003d new Event(false, \"Test Event\", LocalDate.of(2023, 9, 22), LocalDate.of(2023, 10, 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" // Attempt to mark them as not done again and expect a TaskStatusException","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e todo.markAsNotDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e deadline.markAsNotDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e event.markAsNotDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":35}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":11}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java ../src/main/java/tasks/*.java ../src/main/java/commands/*.java","lastModifiedDate":"2023-08-23"},{"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":"NereusWB922"},"content":"java -classpath ../bin Corgi \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":{"NereusWB922":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":"NereusWB922"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"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":"NereusWB922"},"content":" mainClass.set(\"corgi.Corgi\")","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":"NereusWB922"},"content":" archiveBaseName \u003d \"corgi\"","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":{"NereusWB922":7,"-":40}},{"path":"src/main/java/corgi/Corgi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.CommandExecutionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.CommandParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.InvalidCommandFormatException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.InvalidCommandTypeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" * The `Corgi` class represents a chatbot named Corgi that manages tasks.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" * It provides a command-line interface for interacting with the chatbot.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * This class initializes the chatbot and handles user input and commands.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":"public class Corgi {","lastModifiedDate":"2023-08-22"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" private Storage\u003cTask\u003e storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * Constructs new Corgi chatbot with an empty task list.","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" public Corgi() {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" this.storage \u003d new Storage\u003c\u003e(new TaskParser(), \"./data/tasks.txt\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" if (tasks.size() \u003e 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" this.ui.showTasksLoaded(tasks.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" * Starts the chatbot - Corgi.","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" public void start() {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" this.ui.setScanner(sc);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" this.ui.showIntro();","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" String userInput \u003d this.ui.readCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" if (userInput.equals(\"\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" continue;","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" this.ui.showStartLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" Command cmd \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" cmd \u003d new CommandParser().parse(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" cmd.execute(this.tasks, this.ui, this.storage);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" isExit \u003d cmd.isExit();","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" } catch (InvalidCommandFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" this.ui.showError(e.getClass().getSimpleName(), e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" } catch (InvalidCommandTypeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" // Todo: Print all valid commands","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" this.ui.showError(e.getClass().getSimpleName(), e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" } catch (CommandExecutionException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" this.ui.showError(e.getClass().getSimpleName(), e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" this.ui.showEndLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" sc.close();","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" Corgi bot \u003d new Corgi();","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" bot.start();","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":84}},{"path":"src/main/java/corgi/commands/AddTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to add a task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * This command adds a specified task to the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * The type of task (todo, deadline, or event) is determined by the command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"public class AddTaskCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" private Task target;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * The type of task (todo, deadline, or event) being added.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" private String taskType;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new AddTaskCommand instance with the specified task and command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @param target The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @param type The type of command (CommandType.TODO, CommandType.DEADLINE, or CommandType.EVENT).","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" public AddTaskCommand(Task target, CommandType type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" super(false, type);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" this.target \u003d target;","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" if (type \u003d\u003d CommandType.TODO) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" this.taskType \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" } else if (type \u003d\u003d CommandType.DEADLINE) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" this.taskType \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" this.taskType \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by adding the specified task to the task list, saving the updated list to storage,","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" * and displaying a message to the user indicating that the task has been added.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to which the task should be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (if applicable).","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" list.add(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" ui.showTaskAdded(this.taskType, target.toString(), list.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":56}},{"path":"src/main/java/corgi/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * An abstract class to represent command.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" * A flag indicating whether this command should exit the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" private boolean isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" private CommandType type;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new Command instance with the specified exit flag and command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * @param isExit The flag indicating whether this command should exit the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * @param type The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" public Command(boolean isExit, CommandType type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" this.isExit \u003d isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" this.type \u003d type;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" * Executes the command, performing its intended action on the provided task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" * user interface, and storage.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to perform the command action on.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (if applicable).","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" * @throws CommandExecutionException If an error occurs during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" public abstract void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) throws CommandExecutionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" * Checks whether this command should exit the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * @return True if this command should exit, else false.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" return this.isExit;","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" * Gets the type of this command.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" * @return The type of command.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" public CommandType getCommandType() {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" return this.type;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":61}},{"path":"src/main/java/corgi/commands/CommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Parent exception class for chatbot command.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class CommandException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new CommandException using provided error message.","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg Error message provided","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public CommandException(String msg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/commands/CommandExecutionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Represents an exception that is thrown when an error occurs during the execution of a command.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" * It is used to indicate that the execution of a command has failed.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"public class CommandExecutionException extends CommandException {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new CommandExecutionException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the cause of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" public CommandExecutionException(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":16}},{"path":"src/main/java/corgi/commands/CommandType.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Types of commands that can be given to the Corgi chat bot.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public enum CommandType {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" MARK(\"mark [task no.]\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" UNMARK(\"unmark [task no.]\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" TODO(\"todo [task]\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" DEADLINE(\"deadline [task] /by [yyyy-mm-dd]\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" EVENT(\"event [task] /from [yyyy-mm-dd] /to [yyyy-mm-dd]\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" BYE(\"bye\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" LIST(\"list\"),","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" DELETE(\"delete [task no.]\"),","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" DATE(\"date [yyyy-mm-dd]\"),","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" FIND(\"find [keyword]\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" private final String commandFormat;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new CommandType with the given command format.","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" * @param commandFormat The command format","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" CommandType(String commandFormat) {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" this.commandFormat \u003d commandFormat;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * Retrieves the corresponding CommandType enum value based on the given command string.","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * @param commandStr The command string to match","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" * @return The matching CommandType enum value","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" * @throws InvalidCommandException if the command string is not recognized","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" public static CommandType getCommandType(String commandStr) throws InvalidCommandException {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" switch (commandStr.toLowerCase()) {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" case \"mark\":","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" return MARK;","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" return UNMARK;","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" case \"todo\":","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" return TODO;","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" return DEADLINE;","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" case \"event\":","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" return EVENT;","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" case \"bye\":","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" return BYE;","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" case \"list\":","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" return LIST;","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" case \"delete\":","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" return DELETE;","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" case \"date\":","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" return DATE;","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" case \"find\":","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" return FIND;","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" default:","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" * Retrieves the command format string for this CommandType.","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" * @return The command format string","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" public String getCommandFormat() {","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" return this.commandFormat;","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":72}},{"path":"src/main/java/corgi/commands/DeleteTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskListIndexOutOfBoundsException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * This command deletes a task at the specified index from the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"public class DeleteTaskCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" private int targetIdx;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new DeleteTaskCommand instance with the specified target index.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * @param targetIdx The index of the task to be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" public DeleteTaskCommand(int targetIdx) {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" super(false, CommandType.DELETE);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" this.targetIdx \u003d targetIdx;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by deleting the task at the specified index from the task list,","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" * saving the updated list to storage, and displaying a message to the user indicating","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * that the task has been deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list from which the task should be deleted.","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (if applicable).","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * @throws CommandExecutionException If an error occurs during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) throws CommandExecutionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" String targetTaskInfo \u003d list.getTaskInfo(targetIdx);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" list.remove(targetIdx);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" ui.showTaskDeleted(targetTaskInfo, list.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" } catch (TaskListIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" throw new CommandExecutionException(\"Invalid index provided!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":50}},{"path":"src/main/java/corgi/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * This command terminates the application and provides an exit message to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new ExitCommand instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" public ExitCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" super(true, CommandType.BYE);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by displaying an exit message to the user, indicating that the application is terminating.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list (not used in this command).","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying the exit message.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (not used in this command).","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" ui.showExitMsg();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":32}},{"path":"src/main/java/corgi/commands/FindTasksContainKeywordCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to find tasks containing a specific keyword in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"public class FindTasksContainKeywordCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * The predicate used to filter tasks by keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" private Predicate\u003cTask\u003e predicate;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * The target keyword for finding tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" private final String target;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new FindTasksContainKeywordCommand instance with the target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @param target The target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" public FindTasksContainKeywordCommand(String target) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" super(false, CommandType.FIND);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" this.target \u003d target;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" this.predicate \u003d t -\u003e t.contains(target);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by filtering the task list based on the given","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * predicate to find tasks containing specific keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" * It then displays the filtered tasks to the user or a message indicating","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" * that no matching tasks were found.","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to filter.","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying filtered tasks or messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (not used in this command).","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" TaskList tasksContainKeyword \u003d list.filter(predicate);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" if (tasksContainKeyword.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" ui.showNoTaskContainsKeyword(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" ui.showTasksContainKeyword(this.target, tasksContainKeyword.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":55}},{"path":"src/main/java/corgi/commands/FindTasksOnDateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to find tasks on a specific date in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * This command filters the task list based on a given predicate to find tasks on the specified date.","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"public class FindTasksOnDateCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * The predicate used to filter tasks by date.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" private Predicate\u003cTask\u003e predicate;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" * The target date for finding tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" private final LocalDate target;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new FindTasksOnDateCommand instance with the target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" * @param target The target date","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" public FindTasksOnDateCommand(LocalDate target) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" super(false, CommandType.DATE);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" this.target \u003d target;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" this.predicate \u003d t -\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" if (t instanceof Deadline) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" Deadline d \u003d (Deadline) t;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" return d.isHappeningOnDate(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" } else if (t instanceof Event) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" Event e \u003d (Event) t;","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" return e.isHappeningOnDate(this.target);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" };","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by filtering the task list based on the given predicate to find tasks on the specified date.","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" * It then displays the filtered tasks to the user or a message indicating that no tasks were found on the date.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to filter.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying filtered tasks or messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (not used in this command).","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" TaskList tasksOnDate \u003d list.filter(predicate);","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" String outputDate \u003d this.target.format(Task.DATE_OUTPUT_FORMATTER);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" if (tasksOnDate.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" ui.showNoTaskOnDate(outputDate);;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" ui.showTasksOnDate(outputDate, tasksOnDate.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":69}},{"path":"src/main/java/corgi/commands/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Exception thrown when an invalid command is provided.","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class InvalidCommandException extends CommandException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new InvalidCommandException with a default error message.","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" super(\"Invalid command is provided!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":14}},{"path":"src/main/java/corgi/commands/ListTasksCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to list tasks in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * This command retrieves and displays the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"public class ListTasksCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new ListTasksCommand instance.","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" public ListTasksCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" super(false, CommandType.LIST);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by retrieving and displaying the list of tasks to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * It shows either the list of tasks or a message indicating that no tasks are in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to be displayed.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying the task list or a message.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (not used in this command).","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" ui.showNoTaskInList();","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" ui.showTaskList(list.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":37}},{"path":"src/main/java/corgi/commands/MarkTaskCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskListIndexOutOfBoundsException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.TaskStatusException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * Represents a command to mark a task as done or undone in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" * This command updates the status of a task at the specified index in the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"public class MarkTaskCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" * The index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" private int index;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * The new status of the task (true for done, false for undone).","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" private boolean status;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new MarkTaskCommand instance with the specified index, status, and command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @param index The index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" * @param status The new status of the task (true for done, false for undone).","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * @param type The type of command (CommandType.MARK_DONE or CommandType.MARK_UNDONE).","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" public MarkTaskCommand(int index, boolean status, CommandType type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" super(false, type);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" this.status \u003d status;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" * Executes the command by marking the task at the specified index with the new status,","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" * saving the updated list to storage, and displaying a message to the user indicating the task\u0027s status change.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" * @param list The task list to be updated.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" * @param ui The user interface for displaying feedback to the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" * @param storage The storage for saving and loading tasks (if applicable).","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" * @throws CommandExecutionException If an error occurs during command execution.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" public void execute(TaskList list, Ui ui, Storage\u003cTask\u003e storage) throws CommandExecutionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" list.mark(this.index, this.status);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" if (status) {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" ui.showTaskDone(list.getTaskInfo(this.index));","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" ui.showTaskUndone(list.getTaskInfo(this.index));","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" } catch (TaskListIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" throw new CommandExecutionException(\"Invalid index provided!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" } catch (TaskStatusException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" throw new CommandExecutionException(\"The task is already in that status!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":63}},{"path":"src/main/java/corgi/parsers/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.AddTaskCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.CommandType;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.DeleteTaskCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.FindTasksContainKeywordCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.FindTasksOnDateCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.InvalidCommandException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.ListTasksCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.MarkTaskCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * A parser class for interpreting user input and generating corresponding Command objects.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"public class CommandParser extends Parser\u003cCommand\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * Parses the given full command string and generates the corresponding Command object.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" * @param fullCommand The full user input command string.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * @return The Command object representing the parsed command.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" * @throws InvalidCommandFormatException If the command format is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * @throws InvalidCommandTypeException If the command type is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" public Command parse(String fullCommand) throws InvalidCommandFormatException, InvalidCommandTypeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" String[] inputs \u003d fullCommand.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" String cmdStr \u003d inputs[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" CommandType cmd;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" cmd \u003d CommandType.getCommandType(cmdStr);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" } catch (InvalidCommandException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandTypeException(\"Invalid Command!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" Command command \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" switch (cmd) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" case BYE:","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" command \u003d newExitCommand(inputs);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" command \u003d newListCommand(inputs);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" command \u003d newMarkCommand(inputs, true);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" case UNMARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" command \u003d newMarkCommand(inputs, false);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" case TODO:","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" command \u003d newAddCommand(inputs, cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" command \u003d newAddCommand(inputs, cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" case EVENT:","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" command \u003d newAddCommand(inputs, cmd);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" case DELETE:","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" command \u003d newDeleteCommand(inputs);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" case DATE:","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" command \u003d newDateCommand(inputs);","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" case FIND:","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" command \u003d newFindCommand(inputs);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandTypeException(\"Invalid Command!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" return command;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" private Command newExitCommand(String[] inputs) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003e 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is needed!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" + CommandType.BYE.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" private Command newListCommand(String[] inputs) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003e 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is needed!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" + CommandType.LIST.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" return new ListTasksCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" private Command newMarkCommand(String[] inputs, boolean status) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is provided!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" + (status ? CommandType.MARK.getCommandFormat() : CommandType.UNMARK.getCommandFormat()));","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" int index \u003d Integer.parseInt(inputs[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":" return new MarkTaskCommand(index, status,","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" status ? CommandType.MARK : CommandType.UNMARK);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Please provide a valid task number!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" + (status ? CommandType.MARK.getCommandFormat() : CommandType.UNMARK.getCommandFormat()));","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" private Command newDeleteCommand(String[] inputs) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is provided!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"NereusWB922"},"content":" + CommandType.DELETE.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"NereusWB922"},"content":" int index \u003d Integer.parseInt(inputs[1]) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"NereusWB922"},"content":" return new DeleteTaskCommand(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"NereusWB922"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Please provide a valid task number!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"NereusWB922"},"content":" + CommandType.DELETE.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"NereusWB922"},"content":" private Command newDateCommand(String[] inputs) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is provided!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":" + CommandType.DATE.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"NereusWB922"},"content":" LocalDate target \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"NereusWB922"},"content":" String dateStr \u003d inputs[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"NereusWB922"},"content":" target \u003d LocalDate.parse(dateStr, Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"NereusWB922"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Invalid date format!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"NereusWB922"},"content":" return new FindTasksOnDateCommand(target);","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":" private Command newFindCommand(String[] inputs) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is provided!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":" + CommandType.FIND.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":" String keyword \u003d inputs[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"NereusWB922"},"content":" return new FindTasksContainKeywordCommand(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"NereusWB922"},"content":" private Command newAddCommand(String[] inputs, CommandType type) throws InvalidCommandFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"NereusWB922"},"content":" if (inputs.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"No argument is provided!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" + type.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"NereusWB922"},"content":" String taskInfo \u003d inputs[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"NereusWB922"},"content":" if (type \u003d\u003d CommandType.TODO) {","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"NereusWB922"},"content":" Task target \u003d new ToDo(taskInfo);","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"NereusWB922"},"content":" return new AddTaskCommand(target, CommandType.TODO);","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"NereusWB922"},"content":" } else if (type \u003d\u003d CommandType.DEADLINE) {","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"NereusWB922"},"content":" // todo: check number of /by","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"NereusWB922"},"content":" String[] deadlineInfos \u003d taskInfo.split(\" /by \");","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"NereusWB922"},"content":" if (deadlineInfos.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Missing deadline!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":183,"author":{"gitId":"NereusWB922"},"content":" + type.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":184,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"NereusWB922"},"content":" String deadlineDesc \u003d deadlineInfos[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"NereusWB922"},"content":" LocalDate by \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"NereusWB922"},"content":" by \u003d LocalDate.parse(deadlineInfos[1], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"NereusWB922"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Invalid date format!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":193,"author":{"gitId":"NereusWB922"},"content":" + type.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":194,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"NereusWB922"},"content":" Task target \u003d new Deadline(deadlineDesc, by);","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":" return new AddTaskCommand(target, CommandType.DEADLINE);","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"NereusWB922"},"content":" // todo: check number of /from, /to, check order","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"NereusWB922"},"content":" String[] eventInfos \u003d taskInfo.split(\" /from \");","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"NereusWB922"},"content":" if (eventInfos.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Missing /from argument.\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":206,"author":{"gitId":"NereusWB922"},"content":" + type.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":207,"author":{"gitId":"NereusWB922"},"content":" } else if (eventInfos.length \u003e 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Only one /from argument is needed.\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":209,"author":{"gitId":"NereusWB922"},"content":" + type.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":210,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"NereusWB922"},"content":" String eventDesc \u003d eventInfos[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"NereusWB922"},"content":" String[] eventDuration \u003d eventInfos[1].split(\" /to \");","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"NereusWB922"},"content":" if (eventDuration.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Missing /to argument!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"NereusWB922"},"content":" + type.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":218,"author":{"gitId":"NereusWB922"},"content":" } else if (eventDuration.length \u003e 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Only one /to argument is needed.\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":220,"author":{"gitId":"NereusWB922"},"content":" + type.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":221,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"NereusWB922"},"content":" LocalDate from \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":224,"author":{"gitId":"NereusWB922"},"content":" LocalDate to \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":225,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":226,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":227,"author":{"gitId":"NereusWB922"},"content":" from \u003d LocalDate.parse(eventDuration[0], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-09-01"},{"lineNumber":228,"author":{"gitId":"NereusWB922"},"content":" to \u003d LocalDate.parse(eventDuration[1], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-09-01"},{"lineNumber":229,"author":{"gitId":"NereusWB922"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":230,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidCommandFormatException(\"Invalid date format!\" + \"\\nFormat: \"","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"NereusWB922"},"content":" + type.getCommandFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":233,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":234,"author":{"gitId":"NereusWB922"},"content":" Task target \u003d new Event(eventDesc, from, to);","lastModifiedDate":"2023-09-01"},{"lineNumber":235,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":236,"author":{"gitId":"NereusWB922"},"content":" return new AddTaskCommand(target, CommandType.EVENT);","lastModifiedDate":"2023-09-01"},{"lineNumber":237,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":238,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":239,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":239}},{"path":"src/main/java/corgi/parsers/InvalidCommandFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Represents an exception that is thrown when an error occurs due to an invalid command format.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class InvalidCommandFormatException extends InvalidParsingFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new InvalidCommandFormatException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the cause of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public InvalidCommandFormatException(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/parsers/InvalidCommandTypeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Represents an exception that is thrown when an error occurs due to an invalid command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class InvalidCommandTypeException extends InvalidParsingTypeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new InvalidCommandTypeException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the cause of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public InvalidCommandTypeException(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/parsers/InvalidParsingFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Custom exception class for parsing errors related to invalid formats.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class InvalidParsingFormatException extends ParsingException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new InvalidParsingFormatException with the specified error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the invalid parsing format error.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public InvalidParsingFormatException(String msg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/parsers/InvalidParsingTypeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Custom exception class for parsing errors related to invalid types.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class InvalidParsingTypeException extends ParsingException {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new InvalidParsingTypeException with the specified error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the invalid parsing type error.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public InvalidParsingTypeException(String msg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/parsers/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * The Parser abstract class defines a common interface for parsing strings","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" * and converting them into objects of a specified type.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * @param \u003cT\u003e The type of object that the parser can parse strings into.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"public abstract class Parser\u003cT\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * Parses the given string and converts it into an object of type T.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" * @param s The string to be parsed.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" * @return An object of type T parsed from the input string.","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" public abstract T parse(String s) throws ParsingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":17}},{"path":"src/main/java/corgi/parsers/ParsingException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Custom exception class to handle parsing errors.","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class ParsingException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new ParsingException with the specified error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param message The error message describing the parsing error.","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public ParsingException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/parsers/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import corgi.tasks.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" * The TaskParser class extends the abstract Parser class and provides","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" * the implementation to parse string representations of tasks and","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * convert them into Task objects.","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"public class TaskParser extends Parser\u003cTask\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * The separator used to split task infos in the input string.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" public static final String SEPARATOR \u003d \" | \";","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" * Parses the given string representation of a task and converts it into a Task object.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * @param s The string representation of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" public Task parse(String s) throws ParsingException {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" String[] infos \u003d s.split(Pattern.quote(SEPARATOR));","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" if (infos.length \u003c 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Invalid task format!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" String taskType \u003d infos[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" String statusStr \u003d infos[1];","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" String desc \u003d infos[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" boolean status \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" if (statusStr.equals(\"1\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" status \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" } else if (statusStr.equals(\"0\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" status \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Task status should be 0 or 1!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" switch(taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" if (infos.length !\u003d 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Wrong format for ToDo task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" task \u003d new ToDo(status, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" if (infos.length !\u003d 4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Wrong format for Deadline task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" LocalDate by \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" by \u003d LocalDate.parse(infos[3], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Wrong format for date!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" task \u003d new Deadline(status, desc, by);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" if (infos.length !\u003d 5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Wrong format for Event task!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" LocalDate from \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" LocalDate to \u003d null;","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" from \u003d LocalDate.parse(infos[3], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" to \u003d LocalDate.parse(infos[4], Task.DATE_INPUT_FORMATTER);","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingFormatException(\"Wrong format for date!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" task \u003d new Event(status, desc, from, to);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" throw new InvalidParsingTypeException(\"Invalid task type!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" return task;","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":98}},{"path":"src/main/java/corgi/storage/Storable.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * The Storable interface defines methods for converting objects to storable strings","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" * and parsing storable strings to objects.","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * @param \u003cT\u003e The type of object that the storable string can be parsed into.","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"public interface Storable\u003cT\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * Converts the object to a storable string representation.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" * @return The storable string representation of the object.","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" public String toStorableString();","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":16}},{"path":"src/main/java/corgi/storage/StorableList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * An interface representing a list of storable items.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" * @param \u003cT\u003e The type of storable items that the list contains.","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"public interface StorableList\u003cT extends Storable\u003cT\u003e\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * Retrieves a storable string representation of the items in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" * @return The storable string representation of the items.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" public String getStorableString();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.ParsingException;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" * A class for storing and loading objects.","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * @param \u003cT\u003e The type of object being stored and loaded.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"public class Storage\u003cT extends Storable\u003cT\u003e\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" private Parser\u003cT\u003e parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" private String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * Constructs a Storage instance with the given parser and file path.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @param parser The parser for converting objects to storable strings.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @param filePath The file path where data will be stored or loaded.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" public Storage(Parser\u003cT\u003e parser, String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" this.parser \u003d parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" // Check whether dir exists, create one if not","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" File dir \u003d new File(filePath).getParentFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" boolean success \u003d dir.mkdirs();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" if (!success) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"An error occurred when creating directory: \" + dir.getAbsolutePath());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" // Check whether file exists, create one if not","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" boolean success \u003d file.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" if (!success) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"An error occurred when creating file: \" + file.getAbsolutePath());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" System.out.println(\"No previous data file found. Created a new data file at: \"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" + file.getAbsolutePath());","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"An error occurred when creating file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" * Saves a list of storable items to a file.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" * @param list The list of storable items to be saved.","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" public void save(StorableList\u003cT\u003e list) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(this.filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" writer.write(list.getStorableString());","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"An error occurred when saving data: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" * Loads a list of items from a file and returns them as a List.","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" * @return A List containing the loaded items.","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" public List\u003cT\u003e load() {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" List\u003cT\u003e items \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" int skipped \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(this.filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" T item \u003d parser.parse(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" if (item !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" items.add(item);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" } catch (ParsingException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" skipped +\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"A parsing error occurred when loading data: \" + e.getMessage()","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" + \"\\nCorrupted data: \" + line + \" (Skipped)\");","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" System.err.println(\"An error occurred when loading data: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" if (skipped \u003e 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" System.out.println(\"Skipped \" + skipped + \" lines with corrupted data.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" return items;","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"NereusWB922":107}},{"path":"src/main/java/corgi/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Deadline task, a type of task that need to be done before a specific date/time.","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new deadline task with the given description and deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" * @param by The deadline of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" public Deadline(String desc, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" super(false, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new deadline task with the given status, description, and deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * @param status The status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" * @param by The deadline of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" public Deadline(boolean status, String desc, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" super(status, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * Checks if the deadline task is happening on the specified target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" * @param targetDate The date to check against the deadline.","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" * @return True if the task\u0027s deadline matches the target date, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" public boolean isHappeningOnDate(LocalDate targetDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" return this.by.isEqual(targetDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * Converts the deadline task to a storable string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" * @return A string representing the deadline task in a storable format.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" public String toStorableString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" String[] infos \u003d {\"D\", this.status ? \"1\" : \"0\", this.desc, this.by.format(Task.DATE_INPUT_FORMATTER)};","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" return String.join(TaskParser.SEPARATOR, infos);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" * Returns a string representation of the deadline task.","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" * @return Task type, status icon, description and deadline of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" return \"[D]\" + super.toString() + \" (by: \" + this.by.format(Task.DATE_OUTPUT_FORMATTER) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"NereusWB922":67}},{"path":"src/main/java/corgi/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Event task, a type of task that start at a specific date/time and ends at a specific date/time.","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" private LocalDate from;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" private LocalDate to;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new event with the given description and duration.","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the event","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * @param from The start date/time of the event","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * @param to The end date/time of the event","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" public Event(String desc, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" super(false, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new event task with the given status, description, start date, and end date.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * @param status The status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" * @param from The start date of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" * @param to The end date of the event.","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" public Event(boolean status, String desc, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" super(status, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" * Checks if the event task is happening on the specified target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" * @param targetDate The date to check against the event duration.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" * @return True if the task\u0027s event duration includes the target date, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" public boolean isHappeningOnDate(LocalDate targetDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" return targetDate.isEqual(this.from) || targetDate.isEqual(this.to)","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" || (targetDate.isAfter(this.from) \u0026\u0026 targetDate.isBefore(this.to));","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" * Converts the event task to a storable string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" * @return A string representing the event task in a storable format.","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" public String toStorableString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" String[] infos \u003d {\"E\", this.status ? \"1\" : \"0\", this.desc,","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" this.from.format(Task.DATE_INPUT_FORMATTER), this.to.format(Task.DATE_INPUT_FORMATTER)};","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" return String.join(TaskParser.SEPARATOR, infos);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" * Returns a string representation of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" * @return Task type, status icon, description, start date/time and end date/time of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" return \"[E]\" + super.toString() + \" (from: \" + this.from.format(DATE_OUTPUT_FORMATTER)","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" + \" to: \" + this.to.format(DATE_OUTPUT_FORMATTER) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":75}},{"path":"src/main/java/corgi/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.Storable;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * Task class storing description and status.","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"public abstract class Task implements Storable\u003cTask\u003e {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" public static final DateTimeFormatter DATE_INPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" public static final DateTimeFormatter DATE_OUTPUT_FORMATTER \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" protected String desc;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" protected boolean status;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new task with its description. The task\u0027s initial status is set to not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * @param status The status of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" public Task(boolean status, String desc) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" this.status \u003d status;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" * Mark task as done.","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" public void markAsDone() throws TaskStatusException {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" if (this.status \u003d\u003d true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" throw new TaskStatusException(\"The task is already marked as done.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" this.status \u003d true;","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * Mark task as not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" public void markAsNotDone() throws TaskStatusException {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" if (this.status \u003d\u003d false) {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" throw new TaskStatusException(\"The task is already marked as not done.\");","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" this.status \u003d false;","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * Returns an icon representing the status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" * @return An icon (\"X\" for done, \" \" for not done).","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" return (this.status ? \"X\" : \" \");","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" * Checks if the description of the task contains a specified keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" * @param keyword The keyword to search for within the task description.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" * @return True if the keyword is found in the description, false otherwise.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" public boolean contains(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" return this.desc.contains(keyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" * Returns a string representation of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" * @return Status icon and description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.desc;","lastModifiedDate":"2023-08-22"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"NereusWB922":74}},{"path":"src/main/java/corgi/tasks/TaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Custom exception class to handle errors related to Task class.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class TaskException extends Exception {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new ParsingException with the specified error message.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the parsing error.","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public TaskException(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.util.List;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"import corgi.storage.StorableList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * A class representing a list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" * This class implements the StorableList interface to provide methods for tasks storing.","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"public class TaskList implements StorableList\u003cTask\u003e {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" private List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" * Constructs a TaskList containing the given list of tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * @param tasks The list of tasks to initialize the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" * Adds a task to the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" * @param t The task to be added.","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" public void add(Task t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" this.tasks.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" * Removes a task at the specified index from the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" * @param index The index of the task to be removed.","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * @throws TaskListIndexOutOfBoundsException If the index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" public void remove(int index) throws TaskListIndexOutOfBoundsException {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" if (!isValidIndex(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" throw new TaskListIndexOutOfBoundsException(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" this.tasks.remove(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" * Marks a task\u0027s status as done or not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" * @param index The index of the task to be marked.","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" * @param status The new status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" * @throws TaskListIndexOutOfBoundsException If the index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" * @throws TaskStatusException If task was already marked as the given status.","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" public void mark(int index, boolean status) throws TaskListIndexOutOfBoundsException, TaskStatusException {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" if (!isValidIndex(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" throw new TaskListIndexOutOfBoundsException(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" Task task \u003d this.tasks.get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" if (status) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" task.markAsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" * Checks if the provided index is valid within the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" * @param index The index to be checked.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" * @return True if the index is valid, otherwise false.","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" public boolean isValidIndex(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" return index \u003e\u003d 0 \u0026\u0026 index \u003c this.tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" * Returns the number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" * @return The number of tasks in the TaskList.","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" public int size() {","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" * Filters the tasks in the TaskList based on the given predicate.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" * @param predicate The predicate used to filter tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" * @return A new TaskList containing the filtered tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" public TaskList filter(Predicate\u003cTask\u003e predicate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" List\u003cTask\u003e filteredList \u003d this.tasks","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" .stream()","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" .filter(predicate)","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" return new TaskList(filteredList);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" * Checks if the TaskList is empty.","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" * @return True if the TaskList is empty, otherwise false.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":" return this.tasks.isEmpty();","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"NereusWB922"},"content":" * Retrieves a string representation of the task at the specified index.","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"NereusWB922"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":" * @return The string representation of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"NereusWB922"},"content":" * @throws TaskListIndexOutOfBoundsException If the index is invalid.","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"NereusWB922"},"content":" public String getTaskInfo(int index) throws TaskListIndexOutOfBoundsException {","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":" if (!isValidIndex(index)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"NereusWB922"},"content":" throw new TaskListIndexOutOfBoundsException(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"NereusWB922"},"content":" return this.tasks.get(index).toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" * Returns a storable string representation of all the TaskList\u0027s tasks.","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":" * @return The storable string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"NereusWB922"},"content":" public String getStorableString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"NereusWB922"},"content":" String storableString \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"NereusWB922"},"content":" for (Task task : this.tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"NereusWB922"},"content":" storableString +\u003d task.toStorableString() + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"NereusWB922"},"content":" return storableString;","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"NereusWB922"},"content":" * Returns a string representation of task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"NereusWB922"},"content":" * @return The string representation of task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":" String s \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"NereusWB922"},"content":" for (int i \u003d 0; i \u003c this.tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" s +\u003d (i + 1) + \") \" + this.tasks.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":" if (i \u003c this.tasks.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"NereusWB922"},"content":" s +\u003d \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":" return s;","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":165}},{"path":"src/main/java/corgi/tasks/TaskListIndexOutOfBoundsException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * An exception class representing an index out of bounds error specific to the TaskList class.","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" * This exception is thrown when attempting to access or manipulate tasks using an invalid index.","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"public class TaskListIndexOutOfBoundsException extends TaskException {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Constructs a TaskListIndexOutOfBoundsException with the specified detail message.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * @param msg The detail message indicating the cause of the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" public TaskListIndexOutOfBoundsException(String msg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * Constructs a TaskListIndexOutOfBoundsException with the specified invalid index.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * @param index The index that caused the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" public TaskListIndexOutOfBoundsException(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" super(Integer.toString(index));","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":25}},{"path":"src/main/java/corgi/tasks/TaskStatusException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":" * Task status-related exception","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"public class TaskStatusException extends TaskException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * Constructs a new TaskStatusException with the specified error message.","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" * @param msg The error message describing the specific task status error.","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" public TaskStatusException(String msg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" super(msg);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":15}},{"path":"src/main/java/corgi/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import corgi.parsers.TaskParser;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":" * Todo task, a type of task without any date/time attached to it.","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new todo task with the given description. The task\u0027s initial status is set to not done.","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the todo task","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" public ToDo(String desc) {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" super(false, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" * Initializes a new todo task with the given status and description.","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" * @param status The status of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" * @param desc The description of the task.","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" public ToDo(boolean status, String desc) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" super(status, desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" * Converts the todo task to a storable string representation.","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" * @return A string representing the to-do task in a storable format.","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" public String toStorableString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" String[] infos \u003d {\"T\", this.status ? \"1\" : \"0\", this.desc};","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" return String.join(TaskParser.SEPARATOR, infos);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" * Returns a string representation of the todo task.","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" * @return Task type, status icon and description of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" @Override","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" public String toString() {","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"NereusWB922":48}},{"path":"src/main/java/corgi/ui/ErrorMessage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":" * This class defines error messages for various exceptions in the application.","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" * It provides a mapping between exception class names and their corresponding error messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"public class ErrorMessage {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" * A mapping between exception class names and their corresponding error messages.","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" public static final Map\u003cString, String\u003e MAPPER \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" static {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" MAPPER.put(\"InvalidCommandTypeException\",","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" \"Can\u0027t believe you\u0027re asking that! Grrr, what do you want now?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" MAPPER.put(\"InvalidCommandFormatException\",","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" \"Are you trying to confuse me with this nonsense? Try again hooman!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" MAPPER.put(\"CommandExecutionException\",","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" \"Argh, something went wrong! Bad hooman, what are you trying to do!?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":24}},{"path":"src/main/java/corgi/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import java.util.Map;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"import corgi.commands.CommandType;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"/**","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" * The Ui class is responsible for managing the user interface and displaying messages, errors, and prompts.","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" private static final String LOGO \u003d \" ____ ___ ____ ____ ___\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" + \" / ___/ _ \\\\| _ \\\\ / ___|_ _|\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" + \"| | | | | | |_) | | _ | |\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" + \"| |__| |_| | _ \u003c| |_| || |\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":" + \" \\\\____\\\\___/|_| \\\\_\\\\\\\\____|___|\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" private static final String DIVIDER \u003d \"---------------------------------------------------------------------\";","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" private static final Map\u003cString, String\u003e errorMessage \u003d ErrorMessage.MAPPER;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" * Display a message to the console.","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" * @param s The message to display.","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" private void println(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" System.out.println(s);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" * Display the application logo.","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" public void showLogo() {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" this.println(LOGO);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" * Display the introductory message.","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" public void showIntro() {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" this.showLogo();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Woof! I\u0027m Corgi!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" this.println(\"So, what\u0027s your wish this time, hooman?\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" * Read a command from the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" * @return The command entered by the user.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" return this.sc.nextLine().trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" * Set scanner object for reading command.","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":" * @param sc The scanner.","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" public void setScanner(Scanner sc) {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" * Display start line of chatbot message.","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" public void showStartLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" this.println(\"\\n\" + DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" * Display end line of chatbot message.","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"NereusWB922"},"content":" public void showEndLine() {","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"NereusWB922"},"content":" this.println(DIVIDER + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"NereusWB922"},"content":" * Display an error message associated with a specific exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"NereusWB922"},"content":" * @param exception The exception class name.","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"NereusWB922"},"content":" public void showError(String exception) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Woof?! 🤬 \\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"NereusWB922"},"content":" this.println(errorMessage.getOrDefault(exception,","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"NereusWB922"},"content":" \"Oh wonderful, you\u0027ve broken something. And guess what? \"","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"NereusWB922"},"content":" + \"I have \\nabsolutely no idea what happened either.\"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"NereusWB922"},"content":" + \"\\n\\n😇: \" + exception + \" occurred!\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"NereusWB922"},"content":" * Display error message associated with a specific exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"NereusWB922"},"content":" * Also display extra message in the exception.","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"NereusWB922"},"content":" * @param exception The exception class name.","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"NereusWB922"},"content":" * @param extraMsg The extra message.","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"NereusWB922"},"content":" public void showError(String exception, String extraMsg) {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"NereusWB922"},"content":" this.showError(exception);","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"NereusWB922"},"content":" this.println(\"\\n😇: \" + extraMsg);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"NereusWB922"},"content":" * Display the format of a specific command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"NereusWB922"},"content":" * @param c The specific command type.","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"NereusWB922"},"content":" public void showCommandFormat(CommandType c) {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Format: \" + c.getCommandFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating a task has been added.","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"NereusWB922"},"content":" * @param type The type of task added.","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"NereusWB922"},"content":" * @param taskInfo Information about the added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"NereusWB922"},"content":" * @param currentListSize The current size of the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"NereusWB922"},"content":" public void showTaskAdded(String type, String taskInfo, int currentListSize) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Woof, whatever. I\u0027ve added this \" + type + \":\\n\\n \"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"NereusWB922"},"content":" + taskInfo + \"\\n\\nNow you have \" + currentListSize + \" tasks in the list.🐾\");","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating tasks have been loaded from data file.","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"NereusWB922"},"content":" public void showTasksLoaded(int size) {","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Successfully loaded \" + size + \" tasks!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"NereusWB922"},"content":" * Display a exit message.","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"NereusWB922"},"content":" public void showExitMsg() {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Fine! Whatever! Just go away then! See if I care! huffs\");","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating no tasks occurred on target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"NereusWB922"},"content":" * @param date The target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"NereusWB922"},"content":" public void showNoTaskOnDate(String date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"NereusWB922"},"content":" this.println(\"No tasks or events are scheduled for \" + date + \".\");","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":148,"author":{"gitId":"NereusWB922"},"content":" * Display tasks that occurred on the target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"NereusWB922"},"content":" * @param date The target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"NereusWB922"},"content":" * @param tasksOnDate The tasks occurred on the target date.","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":153,"author":{"gitId":"NereusWB922"},"content":" public void showTasksOnDate(String date, String tasksOnDate) {","lastModifiedDate":"2023-09-01"},{"lineNumber":154,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Here are the tasks and events happening on \" + date + \":\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":155,"author":{"gitId":"NereusWB922"},"content":" this.println(tasksOnDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating no tasks containing target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":160,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":161,"author":{"gitId":"NereusWB922"},"content":" * @param keyword The target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"NereusWB922"},"content":" public void showNoTaskContainsKeyword(String keyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"NereusWB922"},"content":" this.println(\"No tasks containing keyword \\\"\" + keyword + \"\\\".\");","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"NereusWB922"},"content":" * Display tasks that contained the target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"NereusWB922"},"content":" * @param keyword The target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"NereusWB922"},"content":" * @param tasksContainKeyword The tasks containing the target keyword.","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"NereusWB922"},"content":" public void showTasksContainKeyword(String keyword, String tasksContainKeyword) {","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Here are the tasks containing keyword \\\"\" + keyword + \"\\\":\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"NereusWB922"},"content":" this.println(tasksContainKeyword);","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating a task has been marked as done.","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"NereusWB922"},"content":" * @param taskInfo Information about the added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"NereusWB922"},"content":" public void showTaskDone(String taskInfo) {","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Congratulations, I guess! You finally managed to do something right 🎉:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"NereusWB922"},"content":" + \"\\n \" + taskInfo + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating a task has been marked as not done.","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"NereusWB922"},"content":" * @param taskInfo Information about the added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"NereusWB922"},"content":" public void showTaskUndone(String taskInfo) {","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Oh great, you\u0027ve undone something 🐕. Just like always:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"NereusWB922"},"content":" + \"\\n \" + taskInfo + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":199,"author":{"gitId":"NereusWB922"},"content":" * Display a message indicating a task has been deleted and display current list size.","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"NereusWB922"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":201,"author":{"gitId":"NereusWB922"},"content":" * @param taskInfo Information about the added task.","lastModifiedDate":"2023-09-01"},{"lineNumber":202,"author":{"gitId":"NereusWB922"},"content":" * @param currentListSize Current size of the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":203,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":204,"author":{"gitId":"NereusWB922"},"content":" public void showTaskDeleted(String taskInfo, int currentListSize) {","lastModifiedDate":"2023-09-01"},{"lineNumber":205,"author":{"gitId":"NereusWB922"},"content":" this.println(\"Finally got rid of that task. Took you long enough... uninterested woof\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":206,"author":{"gitId":"NereusWB922"},"content":" + \"\\n \" + taskInfo + \"\\n\\nNow you have \" + currentListSize + \" tasks in the list.🐾\");","lastModifiedDate":"2023-09-01"},{"lineNumber":207,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":208,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":209,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":210,"author":{"gitId":"NereusWB922"},"content":" * Display a mesage indicating there is no task in the list.","lastModifiedDate":"2023-09-01"},{"lineNumber":211,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":212,"author":{"gitId":"NereusWB922"},"content":" public void showNoTaskInList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":213,"author":{"gitId":"NereusWB922"},"content":" this.println(\"If you haven\u0027t noticed, there\u0027s nothing here! No tasks to be found.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":214,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":215,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":216,"author":{"gitId":"NereusWB922"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":217,"author":{"gitId":"NereusWB922"},"content":" * Display the task list.","lastModifiedDate":"2023-09-01"},{"lineNumber":218,"author":{"gitId":"NereusWB922"},"content":" * @param taskList","lastModifiedDate":"2023-09-01"},{"lineNumber":219,"author":{"gitId":"NereusWB922"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":220,"author":{"gitId":"NereusWB922"},"content":" public void showTaskList(String taskList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":221,"author":{"gitId":"NereusWB922"},"content":" this.println(taskList);","lastModifiedDate":"2023-09-01"},{"lineNumber":222,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":223,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":223}},{"path":"src/test/java/corgi/parsers/CommandParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.parsers;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"public class CommandParserTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":" public void parse_invalidByeCommand_throwsInvalidCommandFormatException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" // Test the parsing of the \"bye\" command with arguments","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"bye Corgi\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" public void parse_invalidMarkCommand_throwsInvalidCommandFormatException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" // Test the parsing of the \"mark\" command with an invalid argument","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"mark\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"mark abc\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"mark 1 2 3 4\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" public void parse_invalidUnmarkCommand_throwsInvalidCommandFormatException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" // Test the parsing of the \"mark\" command with an invalid argument","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"unmark\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"unmark abc\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"unmark 1 2 3 4\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"NereusWB922"},"content":" public void parse_invalidDeadlineCommand_throwsInvalidCommandFormatException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"NereusWB922"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"NereusWB922"},"content":" // Test the parsing of the \"deadline\" command with an invalid argument","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"deadline\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"deadline Invalid deadline /by tomorrow\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"NereusWB922"},"content":" //Todo: Bug found: should count number of /by before start splitting.","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"NereusWB922"},"content":" // assertThrows(InvalidCommandFormatException.class,","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"NereusWB922"},"content":" // () -\u003e parser.parse(\"deadline Invalid deadline /by 2023-09-22 /by 2023-09-23\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"deadline /by 2023-09-22\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"NereusWB922"},"content":" public void parse_invalidEventCommand_throwsInvalidCommandFormatException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"NereusWB922"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"NereusWB922"},"content":" // Test the parsing of the \"event\" command with an invalid argument","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"event\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"event Invalid event /from 2023-09-20\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"event Invalid event /to 2023-09-20\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"NereusWB922"},"content":" assertThrows(InvalidCommandFormatException.class, () -\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"NereusWB922"},"content":" parser.parse(\"event Invalid event /to 2023-09-20 /to 2023-09-22\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":73}},{"path":"src/test/java/corgi/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"package corgi.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":" public void markAsDone_alreadyDoneTask_throwsTaskStatusException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"NereusWB922"},"content":" // Create todo, deadline, event with status initially marked as done","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"NereusWB922"},"content":" ToDo todo \u003d new ToDo(true, \"Test Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"NereusWB922"},"content":" Deadline deadline \u003d new Deadline(true, \"Test Deadline\", LocalDate.of(2023, 9, 22));","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"NereusWB922"},"content":" Event event \u003d new Event(true, \"Test Event\", LocalDate.of(2023, 9, 22), LocalDate.of(2023, 10, 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"NereusWB922"},"content":" // Attempt to mark them as done again and expect a TaskStatusException","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e todo.markAsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e deadline.markAsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e event.markAsDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"NereusWB922"},"content":" @Test","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"NereusWB922"},"content":" public void markAsNotDone_alreadyNotDoneTask_throwsTaskStatusException() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"NereusWB922"},"content":" // Create todo, deadline, event with status initially marked as undone","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"NereusWB922"},"content":" ToDo todo \u003d new ToDo(false, \"Test Task\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"NereusWB922"},"content":" Deadline deadline \u003d new Deadline(false, \"Test Deadline\", LocalDate.of(2023, 9, 22));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"NereusWB922"},"content":" Event event \u003d new Event(false, \"Test Event\", LocalDate.of(2023, 9, 22), LocalDate.of(2023, 10, 1));","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"NereusWB922"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"NereusWB922"},"content":" // Attempt to mark them as not done again and expect a TaskStatusException","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e todo.markAsNotDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e deadline.markAsNotDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"NereusWB922"},"content":" assertThrows(TaskStatusException.class, () -\u003e event.markAsNotDone());","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"NereusWB922"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"NereusWB922"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"NereusWB922":36}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"NereusWB922"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"NereusWB922"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"NereusWB922"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"NereusWB922"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"NereusWB922"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"NereusWB922"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"NereusWB922"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"NereusWB922"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"NereusWB922"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"NereusWB922"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"NereusWB922"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"NereusWB922":11}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"NereusWB922"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java ../src/main/java/tasks/*.java ../src/main/java/commands/*.java","lastModifiedDate":"2023-08-23"},{"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":"NereusWB922"},"content":"java -classpath ../bin Corgi \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":{"NereusWB922":2,"-":36}}] diff --git a/NereusWB922_ip_master/commits.json b/NereusWB922_ip_master/commits.json index b3e5a515..964d8990 100644 --- a/NereusWB922_ip_master/commits.json +++ b/NereusWB922_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"NereusWB922":[{"date":"2023-08-22","commitResults":[{"hash":"dbcee84638adaf96d2aa75ca457371ef7363c3a8","isMergeCommit":false,"messageTitle":"rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":10}}},{"hash":"00b51995d26b0deb64d0a6571231241a81a9c2ca","isMergeCommit":false,"messageTitle":"echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":3}}},{"hash":"5eeab9c29dd057e61b15f241dfc3e3c44bf84eee","isMergeCommit":false,"messageTitle":"Add tasks list field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"39eed23917b3ef2dc7fb5c744a6ce9a67d04b805","isMergeCommit":false,"messageTitle":"Add addTask method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":6}}},{"hash":"3c732239b3a0bc2b8da341e66fb47b149d3756bd","isMergeCommit":false,"messageTitle":"Add displayTask method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"20d5e25db4bade9ed6678b5c8f8d31a5d394600f","isMergeCommit":false,"messageTitle":"Add JavaDoc for start, addTask and displayTask","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"b8ea75b4d0cc0449b180cd0bd64bf9a60c9bf32d","isMergeCommit":false,"messageTitle":"Add JavaDoc for constructor","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"6fdd367be688c85c11491b9f31911098eda13bc6","isMergeCommit":false,"messageTitle":"Add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"bba7e5fe479a804a2e0e51d6d99f6bb129a7c026","isMergeCommit":false,"messageTitle":"Create package for tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"47d0ad27a9eb8b253c5c8dd4cd1c3d52415a8a6e","isMergeCommit":false,"messageTitle":"Use Task class to represent class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"07b840a1e1e4330a554bb9caa5a823b382a2631a","isMergeCommit":false,"messageTitle":"Add mark task done command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"46a1d9dafd4394d43b059f30f777e97e3b02c3fc","isMergeCommit":false,"messageTitle":"Add mark task as not done method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"d809ef915dccdec191d9e1be11a52d5f4a8b8f22","isMergeCommit":false,"messageTitle":"Add JavaDoc for markTaskAsDone , markTaskAsNotDone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"db24df90d449213910c319549fd0d80d767a4b78","isMergeCommit":false,"messageTitle":"Add ToDo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"33bb53b43a9ac1f064296e54b8ec6a7a5c329191","isMergeCommit":false,"messageTitle":"Add Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"64619843f06cd90d8701731028e3345c93791117","isMergeCommit":false,"messageTitle":"Add Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"0d8a23feb4c43cae1e4202621c6f2238f0bd2d1e","isMergeCommit":false,"messageTitle":"Add addTask with different task type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":10}}},{"hash":"97f24a151ba41cd4e7c991768fbdee9f845a0edd","isMergeCommit":false,"messageTitle":"Add JavaDoc for overloaded addTask method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"2aa5192c67cb3d5f5219eff55aea6508339e1617","isMergeCommit":false,"messageTitle":"Add JavaDoc to Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"b0f433fae49fc1bbea4684e1a646c63df5c2ae51","isMergeCommit":false,"messageTitle":"Add JavaDoc to ToDo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"2d2ee993daba9c8063a674847c994a020c17a3f3","isMergeCommit":false,"messageTitle":"Add JavaDoc to Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"5c3b607a4db5e0b88ffad2d01aaa4030c8d47525","isMergeCommit":false,"messageTitle":"Add JavaDoc to Event class","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"933853de6acc5913081a397115bf41e3664e3aa2","isMergeCommit":false,"messageTitle":"Edit unit test script","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":2,"deletions":2}}},{"hash":"85043f5fccb704f82a1eaf9cf25977e49270bc2d","isMergeCommit":false,"messageTitle":"Add test input and expected output","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"254cbff3ccff851500f000b69defca8e7edcf098","isMergeCommit":false,"messageTitle":"Add CommandType enum","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"63e571f9813f8985899034c691452e1196519425","isMergeCommit":false,"messageTitle":"Add InvalidCommandException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"562c9ab30bf38a48783a4e25950a99dcd1ce1ebc","isMergeCommit":false,"messageTitle":"Handle invalid command error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":68}}},{"hash":"847b18f1045000f2799bd405b21f776a3e9635d9","isMergeCommit":false,"messageTitle":"Add JavaDoc for printException method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"5956114eb284eefc1423937226a3ab31dadaf78a","isMergeCommit":false,"messageTitle":"Add JavaDoc for CommandType enum","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"6e7312c562644c63891c8deba6d7462ece707120","isMergeCommit":false,"messageTitle":"Add JavaDoc for InvalidCommandException class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"3a184241a07fb15cc97a8889071558544dcdc32f","isMergeCommit":false,"messageTitle":"Handle invalid command for bye and list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"8bca97955afec881b23680123cfb3dff098aa44e","isMergeCommit":false,"messageTitle":"Add parent exception class for command exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"91411db2cba32bd1a1786f0c27ac5d6509ad0bb7","isMergeCommit":false,"messageTitle":"Add empty decription exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"f77e2dc6f05243cfeb3d2ba0ef2ec286566b4b68","isMergeCommit":false,"messageTitle":"Add invalid description format exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"89ebc1431d33f2ef9fd4576614c2b2e7e75fe6e2","isMergeCommit":false,"messageTitle":"Add command format field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}},{"hash":"c86c74e12c339aa57c1f746b4c6760a4a3105900","isMergeCommit":false,"messageTitle":"Handle invalid command format exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":32}}},{"hash":"67b505696bf2eb929d6f716a28b5568601ac2670","isMergeCommit":false,"messageTitle":"Add angry-dog themed reply","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":15}}},{"hash":"8f1baaa0b7bfa91edcb302e8ba8d5d34594eec42","isMergeCommit":false,"messageTitle":"Handle general exception by output to console","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"de008372972c3d5ea5c9881c72d98688ed723cfc","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"654646bb8e99375f45b483283891365678688231","isMergeCommit":false,"messageTitle":"Print more information about general exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a55146438929da2a8640e15c8f9e89f42ddcaaf1","isMergeCommit":false,"messageTitle":"Edit error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"0326917572b076fb5cd8086174852f3115f1f8b3","isMergeCommit":false,"messageTitle":"Handle string to int parsing exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":14}}},{"hash":"1cd28e6a5c62a8a82f8709c299d5c0ce40535e58","isMergeCommit":false,"messageTitle":"Add TaskStatusException class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"28668787171d5518c8e61f0c7dc375daf8dcf837","isMergeCommit":false,"messageTitle":"Handle TaskStatusException in mark and unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"5cb253078423a2b57766f97caa9ccd7cf572fd3d","isMergeCommit":false,"messageTitle":"Edit error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"041261488b970c2735cf3e9f193214ccedddfaab","isMergeCommit":false,"messageTitle":"Edit output message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"836144849bf9951ce4e0a28e292b31cfa06af0c7","isMergeCommit":false,"messageTitle":"Edit unit test script","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":1,"deletions":1}}},{"hash":"d1a58d7a5879122af728a5f03f26cfded3b13f2b","isMergeCommit":false,"messageTitle":"Edit ouptut layout","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"d79526c932fb892c3cc1a6126ac52b48150fa576","isMergeCommit":false,"messageTitle":"Add DELETE CommandType","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"c154cc59a7d8eed37d79c2eeec51de27d557911f","isMergeCommit":false,"messageTitle":"Add delete task method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"b921a072c86ba53a83d0080f2d5e10bc2e29e891","isMergeCommit":false,"messageTitle":"Add delete command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"f70e0909232e8746730c57d30c4f656f84c799f3","isMergeCommit":false,"messageTitle":"Edit remove task message","messageBody":"","tags":["Level-6","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"86d62b6bef7b5a7601e3afae99c6ba50e6960ff0","isMergeCommit":false,"messageTitle":"Add Storable interface","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"64e41b0da1f65111d447dfea16de410966015045","isMergeCommit":false,"messageTitle":"Make Task class abstract","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"42da0fdcf40744c2e99c9e9a5442f2f3cff351cb","isMergeCommit":false,"messageTitle":"Add argument for parseStorableString method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ffd7ad6e3ced34129fd3da22b24321b28c24b9b7","isMergeCommit":false,"messageTitle":"Remove parse method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":7}}},{"hash":"a651148709bd896b3c198267041b65ce182f02ea","isMergeCommit":false,"messageTitle":"Implement Storable interface","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":6}}},{"hash":"cefe77de70be5f2bef5f143aef434ff9e9e02b16","isMergeCommit":false,"messageTitle":"Add abstract Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"0e7da1f2d1ca0da92b309e491ad95dc52cbbe88e","isMergeCommit":false,"messageTitle":"Add custom exception for general parsing error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"0a94a571f535df08eb0d021b582dae29c82dd83c","isMergeCommit":false,"messageTitle":"Add InvalidParsingFormatException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"d251fa30729ba113d0c791242ce8f4e3ebb02d2e","isMergeCommit":false,"messageTitle":"Add InvalidParsingTypeException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"17791342618112c8e4e2bee6daae14350b0e641c","isMergeCommit":false,"messageTitle":"Add parser for Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":0}}},{"hash":"8d1c9e21bc814a35805b35d36165a9fa6079b49d","isMergeCommit":false,"messageTitle":"Fix task type typo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"3972be6629ee44576f01c9b637f40d4edd2ad4b2","isMergeCommit":false,"messageTitle":"Handling parsing exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}},{"hash":"d76e6e704b1d4f4837a520e2b1862c7754c8b4c7","isMergeCommit":false,"messageTitle":"Add Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":0}}},{"hash":"20f0efff164d96f82b67605b28da215a9fa4e421","isMergeCommit":false,"messageTitle":"Use storage in chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"411e36b91665968f575b142c8b8ffe1d03efe93d","isMergeCommit":true,"messageTitle":"Merge level-7 branch to master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f3fa1a4e6676815838a2e43685618ce64bb2680e","isMergeCommit":false,"messageTitle":"Remove never used imported class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"fdde4c4005eba83bdd86e20a22cb70a4c5366722","isMergeCommit":false,"messageTitle":"Edit format for command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"9b576c7efd5e1f785e650907da16006f0828c543","isMergeCommit":false,"messageTitle":"Add constant DateTimeFormatter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"2ed2bb7aee9c43add77c50355462ed6845a6d60b","isMergeCommit":false,"messageTitle":"Store date in LocalDate type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":11}}},{"hash":"b3aa9b8e64b414281777268b9b1ba77fedfcad38","isMergeCommit":false,"messageTitle":"Parse date string to LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":2}}},{"hash":"6413a6a3e8c3083e2315d0a532e5718a3ab238c9","isMergeCommit":false,"messageTitle":"Parse date string to LocalDate type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"ac7bd41ee8400e2109d5e65e6c97892b51ea2aa9","isMergeCommit":false,"messageTitle":"Edit console message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"cec16dcc13c4e9af26a35011d9fb7ac3804d95ff","isMergeCommit":false,"messageTitle":"Print message indicate new data file created","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"d581e623f53984ba6a44bdf00c28ed42c5a93f3e","isMergeCommit":false,"messageTitle":"Add new command to find tasks on date","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"11e220161c533be0ea8ab709af4eb19919bcdaba","isMergeCommit":false,"messageTitle":"Add isHappeningOnDate method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"a459fbbf30f396cb371989e53246819d36b1e74e","isMergeCommit":false,"messageTitle":"Add new command DATE","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":0}}},{"hash":"b2ea151a597235f0c9af8bb2caf5b2a699749ba8","isMergeCommit":true,"messageTitle":"Merge Level-8 branch to master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"cb4dd986b511c980d831c3ace21d4ea0adff0655","isMergeCommit":false,"messageTitle":"Copy list value using constructor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d256712003a78d4905975923c9d824b6fbe257c7","isMergeCommit":false,"messageTitle":"Add StorableList interface","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"a45113f61db40b78e7d0196a9d98b978047df864","isMergeCommit":false,"messageTitle":"Implement TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":0}}},{"hash":"738742b9426a69acc1ad235050c087430ef0141d","isMergeCommit":false,"messageTitle":"Create custom TaskListIndexOutOfBoundsException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"fec75b2a560cfe510eba2e0db34c90933c028306","isMergeCommit":false,"messageTitle":"Modify save method argument to StorableList type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"ca98918703cea2ca6475bb333ae6030ee030e537","isMergeCommit":false,"messageTitle":"Use TaskList class to replace List","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":44}}},{"hash":"415006edb0aebbfed8c8ab7e5d6885b502fd0186","isMergeCommit":false,"messageTitle":"Replace printTask with toString","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":11}}},{"hash":"87ba1691373b7ff44db84cf12a146cc1eb8617a8","isMergeCommit":false,"messageTitle":"Enable create exception with custom message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"70d53647ee9a683e051901b3a65f5430e2c56a10","isMergeCommit":false,"messageTitle":"Add CommandFormat class to store command format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"5cf3fc0347c3d20d568933554d63ebe423a14d82","isMergeCommit":false,"messageTitle":"Add ErrorMessage class to store error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"01dcc8d705d19a5514f2ed77eb001d079582dec0","isMergeCommit":false,"messageTitle":"Remove \\n after last task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"d2c6afe1c742d12198004b83a7141aa4de5f1094","isMergeCommit":false,"messageTitle":"Add Ui class to extract user interface handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":0}}},{"hash":"3f38e966c8135e9fe518af3492cf4c5eb8d8a21a","isMergeCommit":false,"messageTitle":"Use Ui class to replace print statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":61}}},{"hash":"1ad42804147b1ab1d0cb7dcbed270547398e8153","isMergeCommit":false,"messageTitle":"Add general task exception class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"8e6c1c553c8606cc16af2f1502e5742461d814e8","isMergeCommit":false,"messageTitle":"Inherit from TaskException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"12e9b981ee2c35832b9f1a34de9c10b5b2f77f5b","isMergeCommit":false,"messageTitle":"Add abstract Command class to represent command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":0}}},{"hash":"79c5f1adf9d0aa76a7402049a06f6b11827a7795","isMergeCommit":false,"messageTitle":"Implement AddTaskCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":0}}},{"hash":"4cba0ed0bc2a32737502b8bfc9acfd9ebedefeb4","isMergeCommit":false,"messageTitle":"Implement DeleteTaskCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":0}}},{"hash":"d480d5425c245779155b4a6585182a3cb9ffb78d","isMergeCommit":false,"messageTitle":"Implement ExitCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"9dc1c7e94f3e3cd0f430aee85889b9b2ada66b9f","isMergeCommit":false,"messageTitle":"Implement FindTasksOnDateCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":0}}},{"hash":"109840ee985f85267b106af1a29a2c135eaf06e6","isMergeCommit":false,"messageTitle":"Implement ListTasksCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"f61af29cc04544a22175dae1e1eb48c5e8cdbd6a","isMergeCommit":false,"messageTitle":"Implement MarkTaskCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":0}}},{"hash":"b3e1ceee2c99637cbb04bd73103fec37f42e03de","isMergeCommit":false,"messageTitle":"Add custom exception for command execution","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"ddb1381f649c19a334892f2c934e71676401126e","isMergeCommit":false,"messageTitle":"Implement CommandParser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":236,"deletions":0}}},{"hash":"e57a8b64258d5162d7d4beed6646dbca2bed096b","isMergeCommit":false,"messageTitle":"Add ParsingException subclass","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":28}}},{"hash":"913ec344f1786449ea91cd1e73dc88efd631d7ab","isMergeCommit":false,"messageTitle":"Change ParsingException to checked exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"87ffc309d23c9f1444c0fff4e329d7f08caf8641","isMergeCommit":false,"messageTitle":"Add throws statement in parse method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"2b4c2c676bccc19284a3661ffec3a5427aad3e14","isMergeCommit":false,"messageTitle":"Edit error message correspond to exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":8}}},{"hash":"1bb528e0134f0db23b9364a231fd1d2a5d18845b","isMergeCommit":false,"messageTitle":"Edit ui display","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"62e30029a20b595e1dedd1fcfcaba61d1e14393c","isMergeCommit":false,"messageTitle":"Use Command class and CommandParser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":271}}},{"hash":"c58373034a32bd658306ea3f9fdba4ed9f7fdc38","isMergeCommit":true,"messageTitle":"Merge branch-A-MoreOOP into master","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"bdf643ad3dd5f4f910b7c3b41b47ce1c85076e7b","isMergeCommit":false,"messageTitle":"Add all packages under corgi folder","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":106}}},{"hash":"9526a2b70b2a7ff81872527acc6f257883b70ade","isMergeCommit":true,"messageTitle":"Add gradle to master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"29663091a44e38cfd2ff32b3cc6e6a3905327d01","isMergeCommit":false,"messageTitle":"Config build.gradle main class","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"8fa5657028e1a66a73f274bf02883e5e5df93939","isMergeCommit":false,"messageTitle":"Add unit test for Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}},{"hash":"d483c7c9a492777915e5c7af1b6f95103c4ff78f","isMergeCommit":false,"messageTitle":"Add unit test for commandParser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":0}}},{"hash":"805285ec3e0e3592cdf8b1be3a6961be94486b68","isMergeCommit":true,"messageTitle":"Merge A-JUnit into master","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"4e746ab892eb89b0c6d0574e211d54b376764b97","isMergeCommit":false,"messageTitle":"Edit shadow base name","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"b0610f027973af3be13494060f7530b0807f2ad7","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"c2b768331424ce35174ae7aacaefea29b174d1b2","isMergeCommit":false,"messageTitle":"Remove commandFormat mapper","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":33}}},{"hash":"3180c093f2862493aecb9453a11dd66b33c06764","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":0}}},{"hash":"bdf1bb92f909577f56b80994e564d259b9544193","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":21}}},{"hash":"53c03042f7a731989fa837fdf71cd63dc06327ce","isMergeCommit":false,"messageTitle":"Extract predicate logic to FindTasksOnDateCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":20}}},{"hash":"53fac6e58f916c7af9137e946587949103c81c73","isMergeCommit":false,"messageTitle":"Add new command type find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"d950dafe27a8b6180a71aca2f3614001423c47b0","isMergeCommit":false,"messageTitle":"Implement new command class for find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":0}}},{"hash":"0fc5897be0f0fbf8aa62bb2c0efef315fecc3698","isMergeCommit":false,"messageTitle":"Edit javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"81f263609b5d6e6bee5d3cdd570ebe46d4124592","isMergeCommit":false,"messageTitle":"Include logic for parsing find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"30befa110499db0481726a237efcedc84f489443","isMergeCommit":false,"messageTitle":"Add method contains","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"0d21cca17da5db73bba30f0dba65a0e924f6a7ac","isMergeCommit":false,"messageTitle":"Add ui method for displaying find command result","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"aab5055207822fcf80a3c3475a2f83034145f97a","isMergeCommit":false,"messageTitle":"Edit import statement arrangement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"95aad42def2dc13ae371c193783ca2b8e47d66be","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc to master","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"ddb231e16bb7500b2734656f76328e954d6fc6db","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandard into master","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"efe9e9311d528103aa4f5343f028da2cfb92fa2f","isMergeCommit":true,"messageTitle":"Merge branch-Level-9 into master","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"2b689c1b3b2321dd60d5ef11fbc27e3182babbcf","isMergeCommit":false,"messageTitle":"Rename class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"NereusWB922":{"java":2007,"md":0,"fxml":0,"sh":2,"bat":0,"gradle":2,"txt":11}},"authorContributionVariance":{"NereusWB922":335332.6},"authorDisplayNameMap":{"NereusWB922":"CS2103T-W15-2 NERE.. BIN"}} +{"authorDailyContributionsMap":{"NereusWB922":[{"date":"2023-08-22","commitResults":[{"hash":"dbcee84638adaf96d2aa75ca457371ef7363c3a8","isMergeCommit":false,"messageTitle":"rename, greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":10}}},{"hash":"00b51995d26b0deb64d0a6571231241a81a9c2ca","isMergeCommit":false,"messageTitle":"echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":3}}},{"hash":"5eeab9c29dd057e61b15f241dfc3e3c44bf84eee","isMergeCommit":false,"messageTitle":"Add tasks list field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"39eed23917b3ef2dc7fb5c744a6ce9a67d04b805","isMergeCommit":false,"messageTitle":"Add addTask method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":6}}},{"hash":"3c732239b3a0bc2b8da341e66fb47b149d3756bd","isMergeCommit":false,"messageTitle":"Add displayTask method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":1}}},{"hash":"20d5e25db4bade9ed6678b5c8f8d31a5d394600f","isMergeCommit":false,"messageTitle":"Add JavaDoc for start, addTask and displayTask","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"b8ea75b4d0cc0449b180cd0bd64bf9a60c9bf32d","isMergeCommit":false,"messageTitle":"Add JavaDoc for constructor","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"6fdd367be688c85c11491b9f31911098eda13bc6","isMergeCommit":false,"messageTitle":"Add Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"bba7e5fe479a804a2e0e51d6d99f6bb129a7c026","isMergeCommit":false,"messageTitle":"Create package for tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"47d0ad27a9eb8b253c5c8dd4cd1c3d52415a8a6e","isMergeCommit":false,"messageTitle":"Use Task class to represent class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"07b840a1e1e4330a554bb9caa5a823b382a2631a","isMergeCommit":false,"messageTitle":"Add mark task done command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"46a1d9dafd4394d43b059f30f777e97e3b02c3fc","isMergeCommit":false,"messageTitle":"Add mark task as not done method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"d809ef915dccdec191d9e1be11a52d5f4a8b8f22","isMergeCommit":false,"messageTitle":"Add JavaDoc for markTaskAsDone , markTaskAsNotDone","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"db24df90d449213910c319549fd0d80d767a4b78","isMergeCommit":false,"messageTitle":"Add ToDo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"33bb53b43a9ac1f064296e54b8ec6a7a5c329191","isMergeCommit":false,"messageTitle":"Add Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"64619843f06cd90d8701731028e3345c93791117","isMergeCommit":false,"messageTitle":"Add Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"0d8a23feb4c43cae1e4202621c6f2238f0bd2d1e","isMergeCommit":false,"messageTitle":"Add addTask with different task type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":66,"deletions":10}}},{"hash":"97f24a151ba41cd4e7c991768fbdee9f845a0edd","isMergeCommit":false,"messageTitle":"Add JavaDoc for overloaded addTask method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":1}}},{"hash":"2aa5192c67cb3d5f5219eff55aea6508339e1617","isMergeCommit":false,"messageTitle":"Add JavaDoc to Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"b0f433fae49fc1bbea4684e1a646c63df5c2ae51","isMergeCommit":false,"messageTitle":"Add JavaDoc to ToDo class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"2d2ee993daba9c8063a674847c994a020c17a3f3","isMergeCommit":false,"messageTitle":"Add JavaDoc to Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"5c3b607a4db5e0b88ffad2d01aaa4030c8d47525","isMergeCommit":false,"messageTitle":"Add JavaDoc to Event class","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"933853de6acc5913081a397115bf41e3664e3aa2","isMergeCommit":false,"messageTitle":"Edit unit test script","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":2,"deletions":2}}},{"hash":"85043f5fccb704f82a1eaf9cf25977e49270bc2d","isMergeCommit":false,"messageTitle":"Add test input and expected output","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"254cbff3ccff851500f000b69defca8e7edcf098","isMergeCommit":false,"messageTitle":"Add CommandType enum","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":0}}},{"hash":"63e571f9813f8985899034c691452e1196519425","isMergeCommit":false,"messageTitle":"Add InvalidCommandException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"562c9ab30bf38a48783a4e25950a99dcd1ce1ebc","isMergeCommit":false,"messageTitle":"Handle invalid command error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":68}}},{"hash":"847b18f1045000f2799bd405b21f776a3e9635d9","isMergeCommit":false,"messageTitle":"Add JavaDoc for printException method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"5956114eb284eefc1423937226a3ab31dadaf78a","isMergeCommit":false,"messageTitle":"Add JavaDoc for CommandType enum","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"6e7312c562644c63891c8deba6d7462ece707120","isMergeCommit":false,"messageTitle":"Add JavaDoc for InvalidCommandException class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"3a184241a07fb15cc97a8889071558544dcdc32f","isMergeCommit":false,"messageTitle":"Handle invalid command for bye and list","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"8bca97955afec881b23680123cfb3dff098aa44e","isMergeCommit":false,"messageTitle":"Add parent exception class for command exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"91411db2cba32bd1a1786f0c27ac5d6509ad0bb7","isMergeCommit":false,"messageTitle":"Add empty decription exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"f77e2dc6f05243cfeb3d2ba0ef2ec286566b4b68","isMergeCommit":false,"messageTitle":"Add invalid description format exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"89ebc1431d33f2ef9fd4576614c2b2e7e75fe6e2","isMergeCommit":false,"messageTitle":"Add command format field","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":1}}},{"hash":"c86c74e12c339aa57c1f746b4c6760a4a3105900","isMergeCommit":false,"messageTitle":"Handle invalid command format exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":32}}},{"hash":"67b505696bf2eb929d6f716a28b5568601ac2670","isMergeCommit":false,"messageTitle":"Add angry-dog themed reply","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":15}}},{"hash":"8f1baaa0b7bfa91edcb302e8ba8d5d34594eec42","isMergeCommit":false,"messageTitle":"Handle general exception by output to console","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"de008372972c3d5ea5c9881c72d98688ed723cfc","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"654646bb8e99375f45b483283891365678688231","isMergeCommit":false,"messageTitle":"Print more information about general exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"a55146438929da2a8640e15c8f9e89f42ddcaaf1","isMergeCommit":false,"messageTitle":"Edit error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"0326917572b076fb5cd8086174852f3115f1f8b3","isMergeCommit":false,"messageTitle":"Handle string to int parsing exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":14}}},{"hash":"1cd28e6a5c62a8a82f8709c299d5c0ce40535e58","isMergeCommit":false,"messageTitle":"Add TaskStatusException class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"28668787171d5518c8e61f0c7dc375daf8dcf837","isMergeCommit":false,"messageTitle":"Handle TaskStatusException in mark and unmark","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"5cb253078423a2b57766f97caa9ccd7cf572fd3d","isMergeCommit":false,"messageTitle":"Edit error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"041261488b970c2735cf3e9f193214ccedddfaab","isMergeCommit":false,"messageTitle":"Edit output message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"836144849bf9951ce4e0a28e292b31cfa06af0c7","isMergeCommit":false,"messageTitle":"Edit unit test script","messageBody":"","fileTypesAndContributionMap":{"sh":{"insertions":1,"deletions":1}}},{"hash":"d1a58d7a5879122af728a5f03f26cfded3b13f2b","isMergeCommit":false,"messageTitle":"Edit ouptut layout","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"d79526c932fb892c3cc1a6126ac52b48150fa576","isMergeCommit":false,"messageTitle":"Add DELETE CommandType","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"c154cc59a7d8eed37d79c2eeec51de27d557911f","isMergeCommit":false,"messageTitle":"Add delete task method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"b921a072c86ba53a83d0080f2d5e10bc2e29e891","isMergeCommit":false,"messageTitle":"Add delete command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"f70e0909232e8746730c57d30c4f656f84c799f3","isMergeCommit":false,"messageTitle":"Edit remove task message","messageBody":"","tags":["Level-6","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"86d62b6bef7b5a7601e3afae99c6ba50e6960ff0","isMergeCommit":false,"messageTitle":"Add Storable interface","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"64e41b0da1f65111d447dfea16de410966015045","isMergeCommit":false,"messageTitle":"Make Task class abstract","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"42da0fdcf40744c2e99c9e9a5442f2f3cff351cb","isMergeCommit":false,"messageTitle":"Add argument for parseStorableString method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ffd7ad6e3ced34129fd3da22b24321b28c24b9b7","isMergeCommit":false,"messageTitle":"Remove parse method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":7}}},{"hash":"a651148709bd896b3c198267041b65ce182f02ea","isMergeCommit":false,"messageTitle":"Implement Storable interface","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":6}}},{"hash":"cefe77de70be5f2bef5f143aef434ff9e9e02b16","isMergeCommit":false,"messageTitle":"Add abstract Parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"0e7da1f2d1ca0da92b309e491ad95dc52cbbe88e","isMergeCommit":false,"messageTitle":"Add custom exception for general parsing error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"0a94a571f535df08eb0d021b582dae29c82dd83c","isMergeCommit":false,"messageTitle":"Add InvalidParsingFormatException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"d251fa30729ba113d0c791242ce8f4e3ebb02d2e","isMergeCommit":false,"messageTitle":"Add InvalidParsingTypeException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"17791342618112c8e4e2bee6daae14350b0e641c","isMergeCommit":false,"messageTitle":"Add parser for Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":0}}},{"hash":"8d1c9e21bc814a35805b35d36165a9fa6079b49d","isMergeCommit":false,"messageTitle":"Fix task type typo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"3972be6629ee44576f01c9b637f40d4edd2ad4b2","isMergeCommit":false,"messageTitle":"Handling parsing exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":8}}},{"hash":"d76e6e704b1d4f4837a520e2b1862c7754c8b4c7","isMergeCommit":false,"messageTitle":"Add Storage class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":98,"deletions":0}}},{"hash":"20f0efff164d96f82b67605b28da215a9fa4e421","isMergeCommit":false,"messageTitle":"Use storage in chatbot","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":1}}},{"hash":"411e36b91665968f575b142c8b8ffe1d03efe93d","isMergeCommit":true,"messageTitle":"Merge level-7 branch to master","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"f3fa1a4e6676815838a2e43685618ce64bb2680e","isMergeCommit":false,"messageTitle":"Remove never used imported class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"fdde4c4005eba83bdd86e20a22cb70a4c5366722","isMergeCommit":false,"messageTitle":"Edit format for command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"9b576c7efd5e1f785e650907da16006f0828c543","isMergeCommit":false,"messageTitle":"Add constant DateTimeFormatter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"2ed2bb7aee9c43add77c50355462ed6845a6d60b","isMergeCommit":false,"messageTitle":"Store date in LocalDate type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":11}}},{"hash":"b3aa9b8e64b414281777268b9b1ba77fedfcad38","isMergeCommit":false,"messageTitle":"Parse date string to LocalDate","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":2}}},{"hash":"6413a6a3e8c3083e2315d0a532e5718a3ab238c9","isMergeCommit":false,"messageTitle":"Parse date string to LocalDate type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"ac7bd41ee8400e2109d5e65e6c97892b51ea2aa9","isMergeCommit":false,"messageTitle":"Edit console message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"cec16dcc13c4e9af26a35011d9fb7ac3804d95ff","isMergeCommit":false,"messageTitle":"Print message indicate new data file created","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"d581e623f53984ba6a44bdf00c28ed42c5a93f3e","isMergeCommit":false,"messageTitle":"Add new command to find tasks on date","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"11e220161c533be0ea8ab709af4eb19919bcdaba","isMergeCommit":false,"messageTitle":"Add isHappeningOnDate method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"a459fbbf30f396cb371989e53246819d36b1e74e","isMergeCommit":false,"messageTitle":"Add new command DATE","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":0}}},{"hash":"b2ea151a597235f0c9af8bb2caf5b2a699749ba8","isMergeCommit":true,"messageTitle":"Merge Level-8 branch to master","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"cb4dd986b511c980d831c3ace21d4ea0adff0655","isMergeCommit":false,"messageTitle":"Copy list value using constructor","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d256712003a78d4905975923c9d824b6fbe257c7","isMergeCommit":false,"messageTitle":"Add StorableList interface","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"a45113f61db40b78e7d0196a9d98b978047df864","isMergeCommit":false,"messageTitle":"Implement TaskList class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":159,"deletions":0}}},{"hash":"738742b9426a69acc1ad235050c087430ef0141d","isMergeCommit":false,"messageTitle":"Create custom TaskListIndexOutOfBoundsException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"fec75b2a560cfe510eba2e0db34c90933c028306","isMergeCommit":false,"messageTitle":"Modify save method argument to StorableList type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"ca98918703cea2ca6475bb333ae6030ee030e537","isMergeCommit":false,"messageTitle":"Use TaskList class to replace List","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":44}}},{"hash":"415006edb0aebbfed8c8ab7e5d6885b502fd0186","isMergeCommit":false,"messageTitle":"Replace printTask with toString","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":11}}},{"hash":"87ba1691373b7ff44db84cf12a146cc1eb8617a8","isMergeCommit":false,"messageTitle":"Enable create exception with custom message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"70d53647ee9a683e051901b3a65f5430e2c56a10","isMergeCommit":false,"messageTitle":"Add CommandFormat class to store command format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":0}}},{"hash":"5cf3fc0347c3d20d568933554d63ebe423a14d82","isMergeCommit":false,"messageTitle":"Add ErrorMessage class to store error message","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"01dcc8d705d19a5514f2ed77eb001d079582dec0","isMergeCommit":false,"messageTitle":"Remove \\n after last task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"d2c6afe1c742d12198004b83a7141aa4de5f1094","isMergeCommit":false,"messageTitle":"Add Ui class to extract user interface handling","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":203,"deletions":0}}},{"hash":"3f38e966c8135e9fe518af3492cf4c5eb8d8a21a","isMergeCommit":false,"messageTitle":"Use Ui class to replace print statement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":61}}},{"hash":"1ad42804147b1ab1d0cb7dcbed270547398e8153","isMergeCommit":false,"messageTitle":"Add general task exception class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":0}}},{"hash":"8e6c1c553c8606cc16af2f1502e5742461d814e8","isMergeCommit":false,"messageTitle":"Inherit from TaskException","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"12e9b981ee2c35832b9f1a34de9c10b5b2f77f5b","isMergeCommit":false,"messageTitle":"Add abstract Command class to represent command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":0}}},{"hash":"79c5f1adf9d0aa76a7402049a06f6b11827a7795","isMergeCommit":false,"messageTitle":"Implement AddTaskCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":56,"deletions":0}}},{"hash":"4cba0ed0bc2a32737502b8bfc9acfd9ebedefeb4","isMergeCommit":false,"messageTitle":"Implement DeleteTaskCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":0}}},{"hash":"d480d5425c245779155b4a6585182a3cb9ffb78d","isMergeCommit":false,"messageTitle":"Implement ExitCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":32,"deletions":0}}},{"hash":"9dc1c7e94f3e3cd0f430aee85889b9b2ada66b9f","isMergeCommit":false,"messageTitle":"Implement FindTasksOnDateCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":0}}},{"hash":"109840ee985f85267b106af1a29a2c135eaf06e6","isMergeCommit":false,"messageTitle":"Implement ListTasksCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}},{"hash":"f61af29cc04544a22175dae1e1eb48c5e8cdbd6a","isMergeCommit":false,"messageTitle":"Implement MarkTaskCommand class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":0}}},{"hash":"b3e1ceee2c99637cbb04bd73103fec37f42e03de","isMergeCommit":false,"messageTitle":"Add custom exception for command execution","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"ddb1381f649c19a334892f2c934e71676401126e","isMergeCommit":false,"messageTitle":"Implement CommandParser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":236,"deletions":0}}},{"hash":"e57a8b64258d5162d7d4beed6646dbca2bed096b","isMergeCommit":false,"messageTitle":"Add ParsingException subclass","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":28}}},{"hash":"913ec344f1786449ea91cd1e73dc88efd631d7ab","isMergeCommit":false,"messageTitle":"Change ParsingException to checked exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"87ffc309d23c9f1444c0fff4e329d7f08caf8641","isMergeCommit":false,"messageTitle":"Add throws statement in parse method","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"2b4c2c676bccc19284a3661ffec3a5427aad3e14","isMergeCommit":false,"messageTitle":"Edit error message correspond to exception","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":8}}},{"hash":"1bb528e0134f0db23b9364a231fd1d2a5d18845b","isMergeCommit":false,"messageTitle":"Edit ui display","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}},{"hash":"62e30029a20b595e1dedd1fcfcaba61d1e14393c","isMergeCommit":false,"messageTitle":"Use Command class and CommandParser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":271}}},{"hash":"c58373034a32bd658306ea3f9fdba4ed9f7fdc38","isMergeCommit":true,"messageTitle":"Merge branch-A-MoreOOP into master","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"bdf643ad3dd5f4f910b7c3b41b47ce1c85076e7b","isMergeCommit":false,"messageTitle":"Add all packages under corgi folder","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":101,"deletions":106}}},{"hash":"9526a2b70b2a7ff81872527acc6f257883b70ade","isMergeCommit":true,"messageTitle":"Add gradle to master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"29663091a44e38cfd2ff32b3cc6e6a3905327d01","isMergeCommit":false,"messageTitle":"Config build.gradle main class","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"8fa5657028e1a66a73f274bf02883e5e5df93939","isMergeCommit":false,"messageTitle":"Add unit test for Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}},{"hash":"d483c7c9a492777915e5c7af1b6f95103c4ff78f","isMergeCommit":false,"messageTitle":"Add unit test for commandParser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":0}}},{"hash":"805285ec3e0e3592cdf8b1be3a6961be94486b68","isMergeCommit":true,"messageTitle":"Merge A-JUnit into master","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}},{"hash":"4e746ab892eb89b0c6d0574e211d54b376764b97","isMergeCommit":false,"messageTitle":"Edit shadow base name","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"b0610f027973af3be13494060f7530b0807f2ad7","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"c2b768331424ce35174ae7aacaefea29b174d1b2","isMergeCommit":false,"messageTitle":"Remove commandFormat mapper","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":33}}},{"hash":"3180c093f2862493aecb9453a11dd66b33c06764","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":55,"deletions":0}}},{"hash":"bdf1bb92f909577f56b80994e564d259b9544193","isMergeCommit":false,"messageTitle":"Follow coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":21}}},{"hash":"53c03042f7a731989fa837fdf71cd63dc06327ce","isMergeCommit":false,"messageTitle":"Extract predicate logic to FindTasksOnDateCommand","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":20}}},{"hash":"53fac6e58f916c7af9137e946587949103c81c73","isMergeCommit":false,"messageTitle":"Add new command type find","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":1}}},{"hash":"d950dafe27a8b6180a71aca2f3614001423c47b0","isMergeCommit":false,"messageTitle":"Implement new command class for find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":0}}},{"hash":"0fc5897be0f0fbf8aa62bb2c0efef315fecc3698","isMergeCommit":false,"messageTitle":"Edit javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}},{"hash":"81f263609b5d6e6bee5d3cdd570ebe46d4124592","isMergeCommit":false,"messageTitle":"Include logic for parsing find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":1}}},{"hash":"30befa110499db0481726a237efcedc84f489443","isMergeCommit":false,"messageTitle":"Add method contains","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"0d21cca17da5db73bba30f0dba65a0e924f6a7ac","isMergeCommit":false,"messageTitle":"Add ui method for displaying find command result","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"aab5055207822fcf80a3c3475a2f83034145f97a","isMergeCommit":false,"messageTitle":"Edit import statement arrangement","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"95aad42def2dc13ae371c193783ca2b8e47d66be","isMergeCommit":true,"messageTitle":"Merge branch-A-JavaDoc to master","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"ddb231e16bb7500b2734656f76328e954d6fc6db","isMergeCommit":true,"messageTitle":"Merge branch-A-CodingStandard into master","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"efe9e9311d528103aa4f5343f028da2cfb92fa2f","isMergeCommit":true,"messageTitle":"Merge branch-Level-9 into master","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"2b689c1b3b2321dd60d5ef11fbc27e3182babbcf","isMergeCommit":false,"messageTitle":"Rename class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}}]},{"date":"2023-09-04","commitResults":[{"hash":"4a213fb5f7f5df4c66fc12b03564d48934f25fa0","isMergeCommit":false,"messageTitle":"Setup gradle for checkstyle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0}}},{"hash":"bd4556075cf61a69e64d2f5b55fdddcc345c14a3","isMergeCommit":true,"messageTitle":"Merge bracnh-A-CheckStyle into master","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"019268112ecb9bebb9a9fee496fddb73e46636f7","isMergeCommit":false,"messageTitle":"Fix checkstyle error","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":205,"deletions":181}}}]}]},"authorFileTypeContributionMap":{"NereusWB922":{"java":2031,"md":0,"fxml":0,"sh":2,"bat":0,"gradle":7,"txt":11}},"authorContributionVariance":{"NereusWB922":287103.88},"authorDisplayNameMap":{"NereusWB922":"CS2103T-W15-2 NERE.. BIN"}} diff --git a/PearlynnT_ip_master/authorship.json b/PearlynnT_ip_master/authorship.json index 3101af53..0966d5d0 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":"-"},"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":"PearlynnT"},"content":"mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" mainClass.set(\"duke.Duke\")","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":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" toolVersion \u003d \u002710.2\u0027","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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"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":"PearlynnT"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":10,"-":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/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":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" * duke.Duke class that encapsulates a personal assistant chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" private static boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.Duke class.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" public Duke(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" Duke.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" Duke.ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" Duke.storage \u003d new Storage(pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-08-30"},{"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-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" * Sets the exit status of the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * @param isExit The boolean value.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" public static void setExit(boolean isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" Duke.isExit \u003d isExit;","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" * Gets the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" * @return The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" public static Storage getStorage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" return Duke.storage;","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":" * Gets the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" * @return the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" public static TaskList getTaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" return Duke.taskList;","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":" * Gets the UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" * @return The UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" public static Ui getUi() {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" return Duke.ui;","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":" * Starts the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" //duke.Duke.ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" while (!Duke.isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" Parser.parse(command, Duke.taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"PearlynnT":82,"-":3}},{"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":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" * The deadline of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" * Returns the 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":" * @return A string representation of the deadline in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" return \"D | \" + status + \" | \" + super.description + \" | \" + byFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":66}},{"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":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" * The start date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * The end date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"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":" * Returns the string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" return \"E | \" + status + \" | \" + super.description + \" | \" + fromFormat + \" - \" + toFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromFormat + \" to: \" + toFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":77}},{"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":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" * The status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"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-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" return this.description;","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":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * Returns the status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" * @return \"X\" to mark the task as done, or \" \" if otherwise.","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" public abstract String taskStringify();","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":90}},{"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-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"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":" * Returns 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":" * @return An array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" return this.list;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" }","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":" * Returns the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" * @return The task at the index.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" private Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" return getList().get(index);","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * Adds a task to the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" private void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" * Deletes a task from the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" private void deleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" this.list.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" * Returns the length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" * @return The length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" private int getLength() {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" return this.list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" public void mark(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"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":87,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printMarkTask(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","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":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" public void unmark(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"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":111,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" t.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printUnmarkTask(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" * Adds a todo to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" public void todo(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"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":135,"author":{"gitId":"PearlynnT"},"content":" || (result.length \u003e 1 \u0026\u0026 !command.startsWith(\"todo \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" Todo todo \u003d new Todo(command.substring(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" addTask(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printAddTask(todo, getLength());","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" * Adds a deadline to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":" public void deadline(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"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":158,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"deadline \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/by\")","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"deadline\", \"/by\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a date/time for the deadline.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The date/time for the deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"PearlynnT"},"content":" Deadline deadline \u003d new Deadline(command.substring(9, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/by\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"PearlynnT"},"content":" addTask(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printAddTask(deadline, getLength());","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"PearlynnT"},"content":" * Adds an event to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"PearlynnT"},"content":" public void event(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"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":194,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"event \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/from\")","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"event\", \"/from\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a start date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide an end date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"PearlynnT"},"content":" } else if (command.contains(\"/from \") \u0026\u0026 command.contains(\"/to\")","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"/from\", \"/to\").isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The start date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The end date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"PearlynnT"},"content":" Event event \u003d new Event(command.substring(6, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/from\") + 6, command.indexOf(\"/to\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/to\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"PearlynnT"},"content":" addTask(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printAddTask(event, getLength());","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"PearlynnT"},"content":" * Deletes the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"PearlynnT"},"content":" public void delete(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"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":239,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"PearlynnT"},"content":" deleteTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printDeleteTask(t, getLength());","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"PearlynnT"},"content":" * Finds the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"PearlynnT"},"content":" public void find(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"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":263,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"find\");","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyKeywordException();","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"PearlynnT"},"content":" String keyword \u003d command.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e matchList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"PearlynnT"},"content":" for (Task t : this.list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"PearlynnT"},"content":" if (t.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"PearlynnT"},"content":" matchList.add(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printFindTask(matchList);","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyKeywordException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":281,"author":{"gitId":"PearlynnT"},"content":" * Returns a substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"PearlynnT"},"content":" * @param text The text to get the substring from.","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"PearlynnT"},"content":" * @param first The word before the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"PearlynnT"},"content":" * @param second The word after the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"PearlynnT"},"content":" * @return The substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"PearlynnT"},"content":" private String textBtwnWords(String text, String first, String second) {","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"PearlynnT"},"content":" return text.substring(text.indexOf(first) + first.length() + 1, text.indexOf(second));","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":291}},{"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-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" public static void parse(String command, TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" Duke.setExit(true);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" Duke.getStorage().saveData(Duke.getTaskList().getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printList(taskList.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" taskList.mark(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" taskList.unmark(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" taskList.todo(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" taskList.deadline(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" taskList.event(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" taskList.delete(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" taskList.find(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printLine();","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.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Storage class that deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" private final String pathname;","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":" * Constructor for duke.util.Storage class.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" public Storage(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" this.pathname \u003d pathname;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * Loads data from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @return An array list of the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" public ArrayList\u003cTask\u003e loadData() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" String data \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" list.add(readData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" sc.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"No file found.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" return list;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" }","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":" * Reads data from each line of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" * @param line The line in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" * @return A Task that the line represents.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" private Task readData(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" String[] data \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" String taskType \u003d data[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" boolean isDone \u003d Integer.parseInt(data[1]) \u003d\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" String description \u003d data[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Todo(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Deadline(description, isDone, data[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" String[] time \u003d data[3].split(\" - \");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Event(description, isDone, time[0], time[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid task type\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" return task;","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" * Saves data to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" public void saveData(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" FileWriter fileWriter \u003d new FileWriter(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" for (Task t : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" String str \u003d t.taskStringify();","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" fileWriter.write(str + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" e.printStackTrace();","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"}],"authorContributionMap":{"PearlynnT":109}},{"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 final String line \u003d \"\\t____________________________________________________________\";","lastModifiedDate":"2023-08-30"},{"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-08-30"},{"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-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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" * Shows the exit message.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" public void showExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"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":" * Shows the error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" * @param errMsg The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" public void showError(String errMsg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t \" + errMsg);","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":" * Shows the divider line.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" public void printLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" System.out.println(line);","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" * Prints the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" public void printList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t \" + (i + 1) + \".\" + list.get(i).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" * Prints the task marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" public void printMarkTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t\\t\" + task.toString());","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" * Prints the task marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" public void printUnmarkTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t\\t\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" }","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":" * Prints the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" private void printNumTasks(int num) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" if (num \u003d\u003d 1 || num \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Now you have \" + num + \" task in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Now you have \" + num + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" * Prints the task added to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" * @param task The task added.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" public void printAddTask(Task task, int num) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t\\t\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" printNumTasks(num);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" * Prints the task deleted from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" * @param task The task deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" public void printDeleteTask(Task task, int num) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t\\t\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" printNumTasks(num);","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" * Prints the task list containing the tasks with the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list containing the tasks with the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" public void printFindTask(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t \" + (i + 1) + \".\" + list.get(i).toString());","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" * Prints the error message when an IndexOutOfBoundsException occurs.","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" public void printIndexOutOfBoundsException(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t ☹ OOPS!!! You don\u0027t have any task in your list. Pls add a task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" } else if (list.size() \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t ☹ OOPS!!! You only have one task in your list. Pls select 1.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t ☹ OOPS!!! Pls select a task number between 1 and \" + list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" * Prints the error message when a DateTimeParseException occurs.","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" public void printDateTimeParseException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t ☹ OOPS!!! Invalid date format. Pls provide a date in the format yyyy-MM-dd HHmm.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":151}},{"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 org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PearlynnT"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"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":"-"},"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":"PearlynnT"},"content":"mainClassName \u003d \u0027duke.Duke\u0027","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" mainClass.set(\"duke.Duke\")","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":"checkstyle {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" toolVersion \u003d \u002710.2\u0027","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":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" archiveFileName \u003d \u0027duke.jar\u0027","lastModifiedDate":"2023-08-30"},{"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":"PearlynnT"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"PearlynnT":10,"-":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/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":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":" * duke.Duke class that encapsulates a personal assistant chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" private static boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.Duke class.","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" public Duke(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" Duke.ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" Duke.ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" Duke.storage \u003d new Storage(pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" Duke.taskList \u003d new TaskList(Duke.storage.loadData());","lastModifiedDate":"2023-08-30"},{"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-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" * Sets the exit status of the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * @param isExit The boolean value.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" public static void setExit(boolean isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" Duke.isExit \u003d isExit;","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" * Gets the storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" * @return The storage.","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" public static Storage getStorage() {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" return Duke.storage;","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":" * Gets the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" * @return the taskList.","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" public static TaskList getTaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" return Duke.taskList;","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":" * Gets the UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" * @return The UI.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" public static Ui getUi() {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" return Duke.ui;","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":" * Starts the chatbot.","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" private void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" //duke.Duke.ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-21"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" while (!Duke.isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" String command \u003d sc.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" Parser.parse(command, Duke.taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"PearlynnT":82,"-":3}},{"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":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" * The deadline of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime by;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Deadline class.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" * @param by The deadline of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" public Deadline(String description, boolean isDone, String by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" this.by \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" * Returns the 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":" * @return A string representation of the deadline in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" return \"D | \" + status + \" | \" + super.description + \" | \" + byFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the deadline.","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" String byFormat \u003d this.by.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" return \"[D]\" + super.toString() + \" (by: \" + byFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":66}},{"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":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":" * The start date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime from;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" * The end date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" protected LocalDateTime to;","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" super(description);","lastModifiedDate":"2023-08-21"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Event class.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * @param from The start date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" * @param to The end date/time of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" public Event(String description, boolean isDone, String from, String to) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" this.from \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" this.to \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"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":" * Returns the string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" public String taskStringify() {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" int status \u003d super.isDone ? 1 : 0;","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" return \"E | \" + status + \" | \" + super.description + \" | \" + fromFormat + \" - \" + toFormat;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the event.","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the event.","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" String fromFormat \u003d this.from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" String toFormat \u003d this.to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HHmm\"));","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" return \"[E]\" + super.toString() + \" (from: \" + fromFormat + \" to: \" + toFormat + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":77}},{"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":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":" * The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":" protected String description;","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":" * The status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-21"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.Task class.","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" * @param isDone The status of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-28"},{"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-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" * @return The description of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" return this.description;","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":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * Returns the status of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" * @return \"X\" to mark the task as done, or \" \" if otherwise.","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-21"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-21"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-21"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task in the file.","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" public abstract String taskStringify();","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" * Returns the string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" * @return A string representation of the task.","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" @Override","lastModifiedDate":"2023-08-21"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" public String toString() {","lastModifiedDate":"2023-08-21"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-21"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"PearlynnT":90}},{"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-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" * Constructor for duke.task.TaskList class.","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" * @param list The array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"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":" * Returns 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":" * @return An array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" public ArrayList\u003cTask\u003e getList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" return this.list;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" }","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":" * Returns the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" * @return The task at the index.","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" private Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" return getList().get(index);","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * Adds a task to the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" private void addTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" * Deletes a task from the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" private void deleteTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" this.list.remove(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" * Returns the length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" * @return The length of the array list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" private int getLength() {","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" return this.list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" public void mark(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"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":87,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"mark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" t.markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printMarkTask(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","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":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" * Marks the task as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" public void unmark(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"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":111,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"unmark\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":" t.markAsUndone();","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printUnmarkTask(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"PearlynnT"},"content":" * Adds a todo to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" public void todo(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"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":135,"author":{"gitId":"PearlynnT"},"content":" || (result.length \u003e 1 \u0026\u0026 !command.startsWith(\"todo \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"todo\");","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" Todo todo \u003d new Todo(command.substring(5));","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" addTask(todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printAddTask(todo, getLength());","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" * Adds a deadline to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"PearlynnT"},"content":" public void deadline(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"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":158,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"deadline \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/by\")","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"deadline\", \"/by\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a date/time for the deadline.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /by\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The date/time for the deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/by \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"PearlynnT"},"content":" Deadline deadline \u003d new Deadline(command.substring(9, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/by\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"PearlynnT"},"content":" addTask(deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printAddTask(deadline, getLength());","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"PearlynnT"},"content":" * Adds an event to the list of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":186,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":187,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":188,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":189,"author":{"gitId":"PearlynnT"},"content":" public void event(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":191,"author":{"gitId":"PearlynnT"},"content":" String[] result1 \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":192,"author":{"gitId":"PearlynnT"},"content":" String[] result2 \u003d command.split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"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":194,"author":{"gitId":"PearlynnT"},"content":" || (result1.length \u003e 1 \u0026\u0026 !command.startsWith(\"event \"))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"PearlynnT"},"content":" } else if (result1.length \u003d\u003d 1","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"PearlynnT"},"content":" || (command.contains(\"/from\")","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"event\", \"/from\").isBlank())) {","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyDescriptionException(\"event\");","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide a start date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /from\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Pls provide an end date/time for the event.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"PearlynnT"},"content":" } else if (command.contains(\"/from \") \u0026\u0026 command.contains(\"/to\")","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"PearlynnT"},"content":" \u0026\u0026 textBtwnWords(command, \"/from\", \"/to\").isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The start date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/from \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\" /to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceBeforeException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"PearlynnT"},"content":" } else if (result2.length \u003d\u003d 1 || result2[1].isBlank()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! The end date/time for the event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"PearlynnT"},"content":" } else if (!command.contains(\"/to \")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"PearlynnT"},"content":" Event event \u003d new Event(command.substring(6, command.indexOf(\"/\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/from\") + 6, command.indexOf(\"/to\") - 1),","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"PearlynnT"},"content":" command.substring(command.indexOf(\"/to\") + 4));","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"PearlynnT"},"content":" addTask(event);","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printAddTask(event, getLength());","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyDescriptionException | NoSpaceBeforeException | DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"PearlynnT"},"content":" * Deletes the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"PearlynnT"},"content":" public void delete(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"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":239,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyTaskException(\"delete\");","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"PearlynnT"},"content":" int idx \u003d Character.getNumericValue(command.charAt(7));","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"PearlynnT"},"content":" Task t \u003d getTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"PearlynnT"},"content":" deleteTask(idx - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printDeleteTask(t, getLength());","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"PearlynnT"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printIndexOutOfBoundsException(getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyTaskException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"PearlynnT"},"content":" * Finds the task.","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"PearlynnT"},"content":" * @param command The command given by the user.","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"PearlynnT"},"content":" public void find(String command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":260,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":261,"author":{"gitId":"PearlynnT"},"content":" String[] result \u003d command.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":262,"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":263,"author":{"gitId":"PearlynnT"},"content":" throw new NoSpaceAfterException(\"find\");","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"PearlynnT"},"content":" } else if (result.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"PearlynnT"},"content":" throw new EmptyKeywordException();","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"PearlynnT"},"content":" String keyword \u003d command.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e matchList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"PearlynnT"},"content":" for (Task t : this.list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"PearlynnT"},"content":" if (t.getDescription().contains(keyword)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":271,"author":{"gitId":"PearlynnT"},"content":" matchList.add(t);","lastModifiedDate":"2023-08-30"},{"lineNumber":272,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printFindTask(matchList);","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"PearlynnT"},"content":" } catch (NoSpaceAfterException | EmptyKeywordException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":277,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":278,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":281,"author":{"gitId":"PearlynnT"},"content":" * Returns a substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"PearlynnT"},"content":" * @param text The text to get the substring from.","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"PearlynnT"},"content":" * @param first The word before the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"PearlynnT"},"content":" * @param second The word after the substring.","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"PearlynnT"},"content":" * @return The substring between two words.","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"PearlynnT"},"content":" private String textBtwnWords(String text, String first, String second) {","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"PearlynnT"},"content":" return text.substring(text.indexOf(first) + first.length() + 1, text.indexOf(second));","lastModifiedDate":"2023-08-30"},{"lineNumber":290,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":291}},{"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-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":" public static void parse(String command, TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" Duke.setExit(true);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":" Duke.getStorage().saveData(Duke.getTaskList().getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showExit();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printList(taskList.getList());","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" taskList.mark(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" taskList.unmark(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" taskList.todo(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" taskList.deadline(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" taskList.event(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" taskList.delete(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" } else if (command.startsWith(\"find\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" taskList.find(command);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printLine();","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.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PearlynnT"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PearlynnT"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PearlynnT"},"content":"import duke.Duke;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PearlynnT"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PearlynnT"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PearlynnT"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PearlynnT"},"content":" * duke.util.Storage class that deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PearlynnT"},"content":" * @author Pearlynn","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PearlynnT"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PearlynnT"},"content":" private final String pathname;","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":" * Constructor for duke.util.Storage class.","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" * @param pathname The pathname of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PearlynnT"},"content":" public Storage(String pathname) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PearlynnT"},"content":" this.pathname \u003d pathname;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" * Loads data from the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" * @return An array list of the tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PearlynnT"},"content":" public ArrayList\u003cTask\u003e loadData() {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PearlynnT"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" File file \u003d new File(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" Scanner sc \u003d new Scanner(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PearlynnT"},"content":" String data \u003d sc.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PearlynnT"},"content":" list.add(readData(data));","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" sc.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"No file found.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" return list;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" }","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":" * Reads data from each line of the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":" * @param line The line in the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" * @return A Task that the line represents.","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" private Task readData(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" String[] data \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" String taskType \u003d data[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" boolean isDone \u003d Integer.parseInt(data[1]) \u003d\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" String description \u003d data[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PearlynnT"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PearlynnT"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Todo(description, isDone);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Deadline(description, isDone, data[3]);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" String[] time \u003d data[3].split(\" - \");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" task \u003d new Event(description, isDone, time[0], time[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PearlynnT"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PearlynnT"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PearlynnT"},"content":" throw new DukeException(\"☹ OOPS!!! Invalid task type\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().printDateTimeParseException();","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" Duke.getUi().showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" return task;","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":" * Saves data to the file.","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" public void saveData(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" FileWriter fileWriter \u003d new FileWriter(this.pathname);","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" for (Task t : list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" String str \u003d t.taskStringify();","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" fileWriter.write(str + \"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" fileWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" e.printStackTrace();","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"}],"authorContributionMap":{"PearlynnT":109}},{"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 final String line \u003d \"\\t____________________________________________________________\";","lastModifiedDate":"2023-08-30"},{"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-08-30"},{"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-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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PearlynnT"},"content":" * Shows the exit message.","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PearlynnT"},"content":" public void showExit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"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":" * Shows the error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PearlynnT"},"content":" * @param errMsg The error message.","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PearlynnT"},"content":" public void showError(String errMsg) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t \" + errMsg);","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":" * Shows the divider line.","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PearlynnT"},"content":" public void printLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PearlynnT"},"content":" System.out.println(line);","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PearlynnT"},"content":" * Prints the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PearlynnT"},"content":" public void printList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t \" + (i + 1) + \".\" + list.get(i).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PearlynnT"},"content":" * Prints the task marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as done.","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"PearlynnT"},"content":" public void printMarkTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t\\t\" + task.toString());","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PearlynnT"},"content":" * Prints the task marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PearlynnT"},"content":" * @param task The task marked as undone.","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PearlynnT"},"content":" public void printUnmarkTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t\\t\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PearlynnT"},"content":" }","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":" * Prints the number of tasks in the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PearlynnT"},"content":" private void printNumTasks(int num) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PearlynnT"},"content":" if (num \u003d\u003d 1 || num \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Now you have \" + num + \" task in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Now you have \" + num + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PearlynnT"},"content":" * Prints the task added to the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PearlynnT"},"content":" * @param task The task added.","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"PearlynnT"},"content":" public void printAddTask(Task task, int num) {","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t\\t\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"PearlynnT"},"content":" printNumTasks(num);","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PearlynnT"},"content":" * Prints the task deleted from the list.","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"PearlynnT"},"content":" * @param task The task deleted.","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"PearlynnT"},"content":" * @param num The number of tasks.","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"PearlynnT"},"content":" public void printDeleteTask(Task task, int num) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t\\t\" + task.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PearlynnT"},"content":" printNumTasks(num);","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PearlynnT"},"content":" * Prints the task list containing the tasks with the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list containing the tasks with the keyword.","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PearlynnT"},"content":" public void printFindTask(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PearlynnT"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t \" + (i + 1) + \".\" + list.get(i).toString());","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PearlynnT"},"content":" * Prints the error message when an IndexOutOfBoundsException occurs.","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"PearlynnT"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"PearlynnT"},"content":" * @param list The task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"PearlynnT"},"content":" public void printIndexOutOfBoundsException(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"PearlynnT"},"content":" if (list.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t ☹ OOPS!!! You don\u0027t have any task in your list. Pls add a task.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"PearlynnT"},"content":" } else if (list.size() \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t ☹ OOPS!!! You only have one task in your list. Pls select 1.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PearlynnT"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t ☹ OOPS!!! Pls select a task number between 1 and \" + list.size());","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PearlynnT"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"PearlynnT"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"PearlynnT"},"content":" * Prints the error message when a DateTimeParseException occurs.","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"PearlynnT"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"PearlynnT"},"content":" public void printDateTimeParseException() {","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"PearlynnT"},"content":" System.out.println(\"\\t ☹ OOPS!!! Invalid date format. Pls provide a date in the format yyyy-MM-dd HHmm.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"PearlynnT"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"PearlynnT"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PearlynnT":151}},{"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 21b04bce..58093c19 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":{}}]}]},"authorFileTypeContributionMap":{"PearlynnT":{"java":1210,"md":2,"fxml":0,"sh":1,"bat":1,"gradle":10,"txt":51}},"authorContributionVariance":{"PearlynnT":121995.625},"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":{}}]}]},"authorFileTypeContributionMap":{"PearlynnT":{"java":1210,"md":2,"fxml":0,"sh":1,"bat":1,"gradle":10,"txt":51}},"authorContributionVariance":{"PearlynnT":94228.83},"authorDisplayNameMap":{"PearlynnT":"CS2103T-F12-2 PEAR..YING"}} diff --git a/RiyaMehta2211_ip_master/commits.json b/RiyaMehta2211_ip_master/commits.json index ac8d5182..2d27691a 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}}}]}]},"authorFileTypeContributionMap":{"RiyaMehta2211":{"java":498,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":18}},"authorContributionVariance":{"RiyaMehta2211":33715.387},"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":{}}]}]},"authorFileTypeContributionMap":{"RiyaMehta2211":{"java":498,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":18}},"authorContributionVariance":{"RiyaMehta2211":32450.977},"authorDisplayNameMap":{"RiyaMehta2211":"CS2103T-T14-2 MEHT..BHAI"}} diff --git a/Sheeepen_ip_master/authorship.json b/Sheeepen_ip_master/authorship.json index 305ffcb3..0ec0320d 100644 --- a/Sheeepen_ip_master/authorship.json +++ b/Sheeepen_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"D false dd /2023-09-02 18:00","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sheeepen":1}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String VERSION \u003d \"OwO Bot ─ a CS2103T iP ─ Week 3 Update\";","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public Duke() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" ui.printWelcomeMessage(VERSION);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" ui.printInstructions();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" runCommandLoop();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" storage.save(tasks.getTaskList());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" ui.printExitMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" new Duke().run();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" public void runCommandLoop() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" Command c;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" do {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" String userInput \u003d ui.getUserCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" c \u003d parser.parse(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" c.execute(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" } while (!ExitCommand.isExit(c));","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":4,"Sheeepen":45}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"public class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":11}},{"path":"src/main/java/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" private String endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public DeadlineCommand(String description, String endTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" tasks.addDeadlineTask(description, endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":20}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" tasks.deleteTask(taskNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":18}},{"path":"src/main/java/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" private String start;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" private String end;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public EventCommand(String description, String start, String end) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" tasks.addEventTask(description, start, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":22}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"exit\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE \u003d \"Exiting program...\";","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" System.out.println(MESSAGE);","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" return command instanceof ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":18}},{"path":"src/main/java/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" System.out.println(MESSAGE_INSTRUCTIONS);","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":14}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" tasks.listTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":13}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public MarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" tasks.markTaskDone(taskNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":22}},{"path":"src/main/java/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public TodoCommand(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d input;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" tasks.addTodoTask(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":18}},{"path":"src/main/java/commands/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Unknown input! Please type a proper command.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" System.out.println(MESSAGE_INSTRUCTIONS);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":13}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" tasks.unmarkTaskDone(taskNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":23}},{"path":"src/main/java/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package exceptions;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" return \"/ᐠ。ⱉ。ᐟ\\\\ノ OOPS! \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":13}},{"path":"src/main/java/helpers/DateTimeDetection.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package helpers;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"public class DateTimeDetection {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public static LocalDateTime detectDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" if (isDateTime(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" return dateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" } else if (isDate(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" LocalDate date \u003d LocalDate.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" return date.atTime(LocalTime.of(23, 59));","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" } else if (isTime(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" LocalTime time \u003d LocalTime.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" return LocalDateTime.of(LocalDate.now(), time);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Invalid format.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" public static boolean isDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" LocalDate.parse(input, dateFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" public static boolean isDate(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" LocalDate.parse(input, dateFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" public static boolean isTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" LocalTime.parse(input, timeFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" public static String formatDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" return dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":66}},{"path":"src/main/java/messages/Message.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package messages;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"public class Message {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" public static final String LOGO \u003d \" OOOO OOOO\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" \" O O w w O O\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" \" O O w w w w O O\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" \" O O w w w w O O\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" \" OOOO w w OOOO\";","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_WELCOME \u003d","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" \"Hello \u003eu\u003c! I\u0027m OwO_bot\\n\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" LOGO + \"\\n\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" \"How can I help today ♥w♥ ?\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_EXIT \u003d \"Bye! Hope to see you again soon! x3\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_INSTRUCTIONS \u003d \"List of available commands:\\n\" + \"list\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" \"todo \u003ctask name\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" \"deadline \u003ctask name\u003e /by \u003cyyyy-MM-dd HH-mm\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" \"event \u003ctask name\u003e /from \u003cyyyy-MM-dd HH-mm\u003e /to \u003cyyyy-MM-dd HH-mm\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" \"mark \u003ctask number\u003e\\n\" + \"unmark \u003ctask number\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" \"delete \u003ctask number\u003e\\n\" + \"exit\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":24}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import commands.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public Command parse(String userInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" String commandWord;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" String arguments \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" if (isSingleWord(userInput)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" commandWord \u003d userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" commandWord \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" arguments \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" return prepareTodo(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" return prepareDeadline(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" return prepareEvent(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" return prepareMark(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" return prepareUnmark(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" return prepareDelete(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" return new HelpCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" public Command prepareTodo(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" return new TodoCommand(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" public Command prepareDeadline(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d args.split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" String description \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" String endTime \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" return new DeadlineCommand(description, endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":" public Command prepareEvent(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d args.split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" String description \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" String startTime \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":" String endTime \u003d arr[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":" return new EventCommand(description, startTime, endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" public Command prepareMark(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" return new MarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":" public Command prepareUnmark(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":" return new UnmarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":" public Command prepareDelete(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" return new DeleteCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" public boolean isSingleWord(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" return input.length() \u003d\u003d input.trim().length();","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":95}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" private static final String FILE_PATH \u003d \"data/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" public Storage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" File directory \u003d new File(\"data\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" directory.mkdir();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" public String load() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(FILE_PATH));","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" StringBuilder content \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" content.append(line).append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" return content.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" public void save(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" FileWriter writer \u003d new FileWriter(file, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" String content \u003d taskList.get(i).toText();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" writer.write(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" writer.write(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Updated task list saved under data/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":72}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import helpers.DateTimeDetection;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public Deadline(String description, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" setDateTime(end);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public Deadline(String description, boolean isDone, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" setDateTime(end);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public void setDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d DateTimeDetection.detectDateTime(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" return \"D \" + this.getDoneStatus() + \" \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" this.description + \" /\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" this.end.toString().replace(\"T\", \" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" return \"[D] \" + super.toString() +","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" \" (\" + DateTimeDetection.formatDateTime(this.end) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":38}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" protected String start;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" protected String end;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" public Event(String description, boolean isDone, String start, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" return \"E \" + this.getDoneStatus() + \" \" + this.description + \" /\" + this.start + \" /\" + this.end;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" return \"[E] \" + super.toString() + \" (\" + this.start + this.end + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":29}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" public void setIsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public void setIsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" public boolean getDoneStatus() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" return this.isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" public abstract String toText();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" return this.getStatus() + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":41}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public TaskList(String content) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" addTextToTask(content);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" public void addTextToTask(String content) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" String[] lines \u003d content.split(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" for (String line: lines) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" String[] parts \u003d line.split(\" \", 3);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" if (parts[0].equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" ToDo task \u003d new ToDo(parts[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" } else if (parts[0].equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d parts[2].split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" Deadline task \u003d new Deadline(arr[0], arr[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d parts[2].split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" Event task \u003d new Event(arr[0], arr[1], arr[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" return this.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" public void listTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"There\u0027s nothing in your list /ᐠ。ꞈ。ᐟ\\\\\");","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" System.out.println(i + 1 + \". \" + tasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" public void markTaskDone(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1).setIsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Yay! You have completed this task:\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1) + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" public void unmarkTaskDone(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1).setIsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Ok... Guess you\u0027re not actually done with this:\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1) + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":" public void deleteTask(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sheeepen"},"content":" Task removedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Sheeepen"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"banished this task to the shadow realm:\\n\" + removedTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Sheeepen"},"content":" printNumTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Sheeepen"},"content":" public void addTodoTask(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"added new task:\\n\" + todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Sheeepen"},"content":" printNumTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Sheeepen"},"content":" public void addDeadlineTask(String description, String end) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Sheeepen"},"content":" Deadline deadline \u003d new Deadline(description, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"added new task:\\n\" + deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Sheeepen"},"content":" printNumTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sheeepen"},"content":" public void addEventTask(String description, String start, String end) {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Sheeepen"},"content":" Event event \u003d new Event(description, start, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"added new task:\\n\" + event);","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Sheeepen"},"content":" printNumTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Sheeepen"},"content":" public void printNumTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"you now have \" + tasks.size() + \" tasks in your list.\" + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":137}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" return \"T \" + this.getDoneStatus() + \" \" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":24}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_WELCOME;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_EXIT;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private final Scanner in;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" private final PrintStream out;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public Ui() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" this.out \u003d out;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" private static final String LINE_DIVIDER \u003d \"────────────────────────────────────\";","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" public void printLineDivider() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" public void printWelcomeMessage(String version) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" printToUser(version);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_WELCOME);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" public void printInstructions() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_INSTRUCTIONS);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" public void printExitMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_EXIT);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" public void printToUser(String text) {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" out.println(text);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" public boolean shouldIgnoreInput(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" return input.trim().isEmpty();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" printLineDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" out.println(\"Please enter command below:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" String userInput \u003d in.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" while (shouldIgnoreInput(userInput)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" userInput \u003d in.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" return userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":65}},{"path":"src/test/java/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public void testSetIsDoneMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"marry a hot babe\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" todo.setIsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" assertTrue(todo.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public void testSetIsNotDoneMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" Event event \u003d new Event(\"wedding for hot babe\",","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" true, \"1200\", \"1600\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" event.setIsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" assertFalse(event.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public void testGetDoneStatus() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"book venue\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" assertFalse(todo.getDoneStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public void testGetDescriptionMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" Deadline deadline \u003d new Deadline(\"send out invitations\",","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" \"2023/12/30 23:59\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"send out invitations\", deadline.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" public void testGetStatusMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" ToDo todo1 \u003d new ToDo(\"hire photographers\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" ToDo todo2 \u003d new ToDo(\"hire musicians\", false);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[X]\", todo1.getStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[ ]\", todo2.getStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sheeepen":48}},{"path":"src/test/java/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" public void testConstructorWithDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Eat potato\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"Eat potato\", todo.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" assertFalse(todo.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" public void testConstructorWithDescriptionAndIsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" ToDo todo1 \u003d new ToDo(\"Eat potati\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"Eat potati\", todo1.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" assertTrue(todo1.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public void testToTextMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Watch paint dry\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"T false Watch paint dry\", todo.toText());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public void testToStringMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Sleep\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[T] [X] Sleep\", todo.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sheeepen":38}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"todo eat dinner","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"deadline read book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"event meeting /from 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":8}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"Sheeepen"},"content":" mainClass.set(\"java.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":{"-":41,"Sheeepen":1}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"D false dd /2023-09-02 18:00","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sheeepen":1}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"import commands.Command;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public static final String VERSION \u003d \"OwO Bot ─ a CS2103T iP ─ Week 3 Update\";","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public Duke() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" ui.printWelcomeMessage(VERSION);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" ui.printInstructions();","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" runCommandLoop();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" storage.save(tasks.getTaskList());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" ui.printExitMessage();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" new Duke().run();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" public void runCommandLoop() {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" Command c;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" do {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" String userInput \u003d ui.getUserCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" c \u003d parser.parse(userInput);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" c.execute(tasks);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" } while (!ExitCommand.isExit(c));","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":4,"Sheeepen":45}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"public class Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" return;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":11}},{"path":"src/main/java/commands/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"deadline\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" private String endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public DeadlineCommand(String description, String endTime) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" tasks.addDeadlineTask(description, endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":20}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public DeleteCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" tasks.deleteTask(taskNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":18}},{"path":"src/main/java/commands/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"event\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" private String start;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" private String end;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public EventCommand(String description, String start, String end) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" tasks.addEventTask(description, start, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":22}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"exit\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE \u003d \"Exiting program...\";","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" System.out.println(MESSAGE);","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" return command instanceof ExitCommand;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":18}},{"path":"src/main/java/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" System.out.println(MESSAGE_INSTRUCTIONS);","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":14}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"list\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" tasks.listTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":13}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"mark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public MarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" tasks.markTaskDone(taskNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":22}},{"path":"src/main/java/commands/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"todo\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" private String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public TodoCommand(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d input;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" tasks.addTodoTask(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":18}},{"path":"src/main/java/commands/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"public class UnknownCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Unknown input! Please type a proper command.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" System.out.println(MESSAGE_INSTRUCTIONS);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":13}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package commands;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public static final String COMMAND_WORD \u003d \"unmark\";","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public UnmarkCommand(int taskNum) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" this.taskNumber \u003d taskNum;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public void execute(TaskList tasks) {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" tasks.unmarkTaskDone(taskNumber);","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":23}},{"path":"src/main/java/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package exceptions;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" super(message);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" return \"/ᐠ。ⱉ。ᐟ\\\\ノ OOPS! \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":13}},{"path":"src/main/java/helpers/DateTimeDetection.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package helpers;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"public class DateTimeDetection {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public static LocalDateTime detectDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" if (isDateTime(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" return dateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" } else if (isDate(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" LocalDate date \u003d LocalDate.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" return date.atTime(LocalTime.of(23, 59));","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" } else if (isTime(input)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" LocalTime time \u003d LocalTime.parse(input, formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" return LocalDateTime.of(LocalDate.now(), time);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Invalid format.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" public static boolean isDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" LocalDate.parse(input, dateFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" public static boolean isDate(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter dateFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" LocalDate.parse(input, dateFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" public static boolean isTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter timeFormatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" LocalTime.parse(input, timeFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" public static String formatDateTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy HH:mm\");","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" return dateTime.format(outputFormatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":66}},{"path":"src/main/java/messages/Message.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package messages;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"public class Message {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" public static final String LOGO \u003d \" OOOO OOOO\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" \" O O w w O O\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" \" O O w w w w O O\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" \" O O w w w w O O\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" \" OOOO w w OOOO\";","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_WELCOME \u003d","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" \"Hello \u003eu\u003c! I\u0027m OwO_bot\\n\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" LOGO + \"\\n\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" \"How can I help today ♥w♥ ?\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_EXIT \u003d \"Bye! Hope to see you again soon! x3\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" public static final String MESSAGE_INSTRUCTIONS \u003d \"List of available commands:\\n\" + \"list\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" \"todo \u003ctask name\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" \"deadline \u003ctask name\u003e /by \u003cyyyy-MM-dd HH-mm\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" \"event \u003ctask name\u003e /from \u003cyyyy-MM-dd HH-mm\u003e /to \u003cyyyy-MM-dd HH-mm\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" \"mark \u003ctask number\u003e\\n\" + \"unmark \u003ctask number\u003e\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" \"delete \u003ctask number\u003e\\n\" + \"exit\";","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":24}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import commands.*;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public Command parse(String userInput) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" String commandWord;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" String arguments \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" if (isSingleWord(userInput)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" commandWord \u003d userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" commandWord \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" arguments \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" case TodoCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" return prepareTodo(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" case DeadlineCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" return prepareDeadline(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" case EventCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" return prepareEvent(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" case MarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" return prepareMark(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" case UnmarkCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" return prepareUnmark(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" return prepareDelete(arguments);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" return new HelpCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" public Command prepareTodo(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" return new TodoCommand(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" public Command prepareDeadline(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d args.split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" String description \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" String endTime \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" return new DeadlineCommand(description, endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":" public Command prepareEvent(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d args.split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" String description \u003d arr[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" String startTime \u003d arr[1];","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":" String endTime \u003d arr[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":" return new EventCommand(description, startTime, endTime);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" public Command prepareMark(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" return new MarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":" public Command prepareUnmark(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":" return new UnmarkCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":" public Command prepareDelete(String args) {","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":" int taskNum \u003d Integer.parseInt(args);","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" return new DeleteCommand(taskNum);","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" public boolean isSingleWord(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" return input.length() \u003d\u003d input.trim().length();","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":95}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" private static final String FILE_PATH \u003d \"data/duke.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" public Storage() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" File directory \u003d new File(\"data\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" directory.mkdir();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" public String load() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(FILE_PATH));","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" String line;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" StringBuilder content \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" content.append(line).append(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" reader.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" return content.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" return null;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" public void save(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" File file \u003d new File(FILE_PATH);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" FileWriter writer \u003d new FileWriter(file, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" String content \u003d taskList.get(i).toText();","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" writer.write(content);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":" writer.write(\"\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Updated task list saved under data/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sheeepen":72}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import helpers.DateTimeDetection;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" protected LocalDateTime end;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public Deadline(String description, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" setDateTime(end);","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public Deadline(String description, boolean isDone, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" setDateTime(end);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public void setDateTime(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" String[] parts \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d DateTimeDetection.detectDateTime(parts[1]);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" return \"D \" + this.getDoneStatus() + \" \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" this.description + \" /\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" this.end.toString().replace(\"T\", \" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" return \"[D] \" + super.toString() +","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" \" (\" + DateTimeDetection.formatDateTime(this.end) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":38}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":" protected String start;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" protected String end;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" public Event(String description, boolean isDone, String start, String end) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" return \"E \" + this.getDoneStatus() + \" \" + this.description + \" /\" + this.start + \" /\" + this.end;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" return \"[E] \" + super.toString() + \" (\" + this.start + this.end + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":29}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" public void setIsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public void setIsNotDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" public boolean getDoneStatus() {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" return this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public String getStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" return this.isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" public abstract String toText();","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" return this.getStatus() + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":41}},{"path":"src/main/java/tasks/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import exceptions.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import tasks.Event;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public TaskList(String content) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" this.tasks \u003d new ArrayList\u003c\u003e(0);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" addTextToTask(content);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":" public void addTextToTask(String content) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" String[] lines \u003d content.split(\"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" for (String line: lines) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" String[] parts \u003d line.split(\" \", 3);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" if (parts[0].equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" ToDo task \u003d new ToDo(parts[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" } else if (parts[0].equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d parts[2].split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":" Deadline task \u003d new Deadline(arr[0], arr[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" String[] arr \u003d parts[2].split(\"/\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" Event task \u003d new Event(arr[0], arr[1], arr[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" return this.tasks;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":" public void listTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" if (tasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"There\u0027s nothing in your list /ᐠ。ꞈ。ᐟ\\\\\");","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" System.out.println(i + 1 + \". \" + tasks.get(i) + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"Sheeepen"},"content":" public void markTaskDone(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1).setIsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Yay! You have completed this task:\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1) + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sheeepen"},"content":" public void unmarkTaskDone(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1).setIsNotDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"Ok... Guess you\u0027re not actually done with this:\\n\" +","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"Sheeepen"},"content":" tasks.get(taskNumber - 1) + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Sheeepen"},"content":" public void deleteTask(int taskNumber) throws IndexOutOfBoundsException {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"Sheeepen"},"content":" if (taskNumber \u003c 0 || taskNumber \u003e tasks.size()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Sheeepen"},"content":" throw new IndexOutOfBoundsException(\"No such task exists!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sheeepen"},"content":" Task removedTask \u003d tasks.get(taskNumber - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Sheeepen"},"content":" tasks.remove(taskNumber - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"banished this task to the shadow realm:\\n\" + removedTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Sheeepen"},"content":" printNumTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Sheeepen"},"content":" public void addTodoTask(String description) {","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(description);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"added new task:\\n\" + todo);","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Sheeepen"},"content":" printNumTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Sheeepen"},"content":" public void addDeadlineTask(String description, String end) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Sheeepen"},"content":" Deadline deadline \u003d new Deadline(description, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"added new task:\\n\" + deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Sheeepen"},"content":" printNumTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sheeepen"},"content":" public void addEventTask(String description, String start, String end) {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Sheeepen"},"content":" Event event \u003d new Event(description, start, end);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Sheeepen"},"content":" this.tasks.add(event);","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"added new task:\\n\" + event);","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Sheeepen"},"content":" printNumTasks();","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Sheeepen"},"content":" public void printNumTasks() {","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Sheeepen"},"content":" System.out.println(\"you now have \" + tasks.size() + \" tasks in your list.\" + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":137}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" public String toText() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" return \"T \" + this.getDoneStatus() + \" \" + this.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":24}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_WELCOME;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_EXIT;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"import static messages.Message.MESSAGE_INSTRUCTIONS;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" private final Scanner in;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" private final PrintStream out;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" public Ui() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" this.out \u003d out;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" private static final String LINE_DIVIDER \u003d \"────────────────────────────────────\";","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" public void printLineDivider() {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" public void printWelcomeMessage(String version) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":" printToUser(version);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_WELCOME);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" public void printInstructions() {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_INSTRUCTIONS);","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" public void printExitMessage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" printToUser(MESSAGE_EXIT);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":" public void printToUser(String text) {","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" out.println(text);","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" out.println(LINE_DIVIDER);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sheeepen"},"content":" public boolean shouldIgnoreInput(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sheeepen"},"content":" return input.trim().isEmpty();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sheeepen"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sheeepen"},"content":" printLineDivider();","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sheeepen"},"content":" out.println(\"Please enter command below:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"Sheeepen"},"content":" String userInput \u003d in.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"Sheeepen"},"content":" while (shouldIgnoreInput(userInput)) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"Sheeepen"},"content":" userInput \u003d in.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sheeepen"},"content":" return userInput;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sheeepen":65}},{"path":"src/test/java/tasks/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" public void testSetIsDoneMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"marry a hot babe\");","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" todo.setIsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" assertTrue(todo.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" public void testSetIsNotDoneMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" Event event \u003d new Event(\"wedding for hot babe\",","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" true, \"1200\", \"1600\");","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" event.setIsNotDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" assertFalse(event.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public void testGetDoneStatus() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"book venue\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" assertFalse(todo.getDoneStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public void testGetDescriptionMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" Deadline deadline \u003d new Deadline(\"send out invitations\",","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" \"2023/12/30 23:59\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"send out invitations\", deadline.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sheeepen"},"content":" public void testGetStatusMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sheeepen"},"content":" ToDo todo1 \u003d new ToDo(\"hire photographers\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sheeepen"},"content":" ToDo todo2 \u003d new ToDo(\"hire musicians\", false);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[X]\", todo1.getStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[ ]\", todo2.getStatus());","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sheeepen":48}},{"path":"src/test/java/tasks/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"package tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sheeepen"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sheeepen"},"content":" public void testConstructorWithDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Eat potato\");","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"Eat potato\", todo.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sheeepen"},"content":" assertFalse(todo.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sheeepen"},"content":" public void testConstructorWithDescriptionAndIsDone() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sheeepen"},"content":" ToDo todo1 \u003d new ToDo(\"Eat potati\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"Eat potati\", todo1.getDescription());","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sheeepen"},"content":" assertTrue(todo1.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sheeepen"},"content":" public void testToTextMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Watch paint dry\");","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"T false Watch paint dry\", todo.toText());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sheeepen"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sheeepen"},"content":" public void testToStringMethod() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sheeepen"},"content":" ToDo todo \u003d new ToDo(\"Sleep\", true);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sheeepen"},"content":" assertEquals(\"[T] [X] Sleep\", todo.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sheeepen"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sheeepen"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sheeepen"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sheeepen":38}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sheeepen"},"content":"todo eat dinner","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Sheeepen"},"content":"deadline read book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"Sheeepen"},"content":"event meeting /from 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"Sheeepen"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sheeepen"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sheeepen"},"content":"unmark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sheeepen"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sheeepen"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sheeepen":8}}] diff --git a/Sheeepen_ip_master/commits.json b/Sheeepen_ip_master/commits.json index 440bcc2f..7aa41050 100644 --- a/Sheeepen_ip_master/commits.json +++ b/Sheeepen_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Sheeepen":[{"date":"2023-08-23","commitResults":[{"hash":"d3a170072c64d563ea8f9153eabb5c11f649ca7d","isMergeCommit":false,"messageTitle":"added welcome and exit message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"36ea0f84da02cf58b8db22b726fcd4c941c30e62","isMergeCommit":false,"messageTitle":"added echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":8}}},{"hash":"4efea27fff98e7b9a2f55697b91301ab1000035d","isMergeCommit":false,"messageTitle":"added list functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"6c1e6a71c317f047c84b533ceb67781727edd0a7","isMergeCommit":false,"messageTitle":"added Task class and functionality","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":8}}},{"hash":"1e9edabeb46485a3c4d9bd717fd90b9410c1addb","isMergeCommit":false,"messageTitle":"added Task subclasses","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":8}}},{"hash":"fd1b9fec5cc40ae1537e8f02e4f512fd615d87d7","isMergeCommit":false,"messageTitle":"added automated text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"ec0f44b891f46c1b28f08c149b4fc175f32b5452","isMergeCommit":false,"messageTitle":"refactored code and added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":91}}},{"hash":"45b9e82fe74b5af7e2a2af6c0bb21839854bce76","isMergeCommit":false,"messageTitle":"added delete task functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":22}}}]},{"date":"2023-08-31","commitResults":[{"hash":"202c85d2624a87c087193e1ac30cec627ebfe28c","isMergeCommit":false,"messageTitle":"Add save function, user can retrieve list from previous session","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":163,"deletions":24}}},{"hash":"0fa0c49f1b29f3d8836685f337ad736b289b4c91","isMergeCommit":true,"messageTitle":"merge branch-level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"26da5a396b8d9a0028e28e8c9557a2c002dae08a","isMergeCommit":false,"messageTitle":"Add LocalDateTime support to Deadline class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":83,"deletions":5}}},{"hash":"4b5d4bf7ba8ebb5a394c7adc2eecc7e351b897a2","isMergeCommit":true,"messageTitle":"merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"45b4505069f0038da67e1982fc9f2c328fd56307","isMergeCommit":false,"messageTitle":"Add Storage class, handles load and save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":127,"deletions":95}}},{"hash":"2730bcd3cacf8c4b6c3a0d7696fad6e1574799ff","isMergeCommit":false,"messageTitle":"Reorganise Duke.java logic","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":12,"deletions":2}}},{"hash":"d0c289b05a7fac5aebbe7a3f69eef9221502bdb5","isMergeCommit":false,"messageTitle":"Add Ui class to handle user interactions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":66,"deletions":30}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d24e599cc456e5c016d8d39e759909a92b79361f","isMergeCommit":false,"messageTitle":"Add Parser and Command classes and sub-classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":512,"deletions":223}}},{"hash":"3c3f3f889fd0b8b1493a0f8b63db1ae9d60c6a20","isMergeCommit":true,"messageTitle":"merge branch-A-MoreOOP","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"a58f6fbff845e5b337acc48f40ee6043a455892d","isMergeCommit":false,"messageTitle":"edit duke.txt file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"636eb177b58ffc93bb290ea7163aaec0eb800070","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/add-gradle-support\u0027 into add-gradle-support merge add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"bf86cc1062288604a640c349cabdd0d582ff4dbe","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 merge add-gradle-support branch","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"04188510caf995596fbf26e0546d2da19523941e","isMergeCommit":false,"messageTitle":"Add JUnit tests for Task and ToDo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":1}}},{"hash":"3a12ebcf25207fc0819c9332ac35a23e2ff278d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027 merge JUnit tests branch","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Sheeepen":{"java":927,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":9}},"authorContributionVariance":{"Sheeepen":54541.88},"authorDisplayNameMap":{"Sheeepen":"CS2103T-W13-4 STEP..G XI"}} +{"authorDailyContributionsMap":{"Sheeepen":[{"date":"2023-08-23","commitResults":[{"hash":"d3a170072c64d563ea8f9153eabb5c11f649ca7d","isMergeCommit":false,"messageTitle":"added welcome and exit message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":6}}},{"hash":"36ea0f84da02cf58b8db22b726fcd4c941c30e62","isMergeCommit":false,"messageTitle":"added echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":8}}},{"hash":"4efea27fff98e7b9a2f55697b91301ab1000035d","isMergeCommit":false,"messageTitle":"added list functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"6c1e6a71c317f047c84b533ceb67781727edd0a7","isMergeCommit":false,"messageTitle":"added Task class and functionality","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":8}}},{"hash":"1e9edabeb46485a3c4d9bd717fd90b9410c1addb","isMergeCommit":false,"messageTitle":"added Task subclasses","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":8}}},{"hash":"fd1b9fec5cc40ae1537e8f02e4f512fd615d87d7","isMergeCommit":false,"messageTitle":"added automated text UI testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0}}},{"hash":"ec0f44b891f46c1b28f08c149b4fc175f32b5452","isMergeCommit":false,"messageTitle":"refactored code and added exception handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":91}}},{"hash":"45b9e82fe74b5af7e2a2af6c0bb21839854bce76","isMergeCommit":false,"messageTitle":"added delete task functionality","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":64,"deletions":22}}}]},{"date":"2023-08-31","commitResults":[{"hash":"202c85d2624a87c087193e1ac30cec627ebfe28c","isMergeCommit":false,"messageTitle":"Add save function, user can retrieve list from previous session","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":163,"deletions":24}}},{"hash":"0fa0c49f1b29f3d8836685f337ad736b289b4c91","isMergeCommit":true,"messageTitle":"merge branch-level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"26da5a396b8d9a0028e28e8c9557a2c002dae08a","isMergeCommit":false,"messageTitle":"Add LocalDateTime support to Deadline class","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":83,"deletions":5}}},{"hash":"4b5d4bf7ba8ebb5a394c7adc2eecc7e351b897a2","isMergeCommit":true,"messageTitle":"merge branch-Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"45b4505069f0038da67e1982fc9f2c328fd56307","isMergeCommit":false,"messageTitle":"Add Storage class, handles load and save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":2},"java":{"insertions":127,"deletions":95}}},{"hash":"2730bcd3cacf8c4b6c3a0d7696fad6e1574799ff","isMergeCommit":false,"messageTitle":"Reorganise Duke.java logic","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":12,"deletions":2}}},{"hash":"d0c289b05a7fac5aebbe7a3f69eef9221502bdb5","isMergeCommit":false,"messageTitle":"Add Ui class to handle user interactions","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":66,"deletions":30}}}]},{"date":"2023-09-01","commitResults":[{"hash":"d24e599cc456e5c016d8d39e759909a92b79361f","isMergeCommit":false,"messageTitle":"Add Parser and Command classes and sub-classes","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1},"java":{"insertions":512,"deletions":223}}},{"hash":"3c3f3f889fd0b8b1493a0f8b63db1ae9d60c6a20","isMergeCommit":true,"messageTitle":"merge branch-A-MoreOOP","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"a58f6fbff845e5b337acc48f40ee6043a455892d","isMergeCommit":false,"messageTitle":"edit duke.txt file","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"636eb177b58ffc93bb290ea7163aaec0eb800070","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/add-gradle-support\u0027 into add-gradle-support merge add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"bf86cc1062288604a640c349cabdd0d582ff4dbe","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 merge add-gradle-support branch","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"04188510caf995596fbf26e0546d2da19523941e","isMergeCommit":false,"messageTitle":"Add JUnit tests for Task and ToDo","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":1}}},{"hash":"3a12ebcf25207fc0819c9332ac35a23e2ff278d6","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027 merge JUnit tests branch","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"8ee37778a8d8b2c90734de2bbb2955031506bb85","isMergeCommit":false,"messageTitle":"update build.gradle for shadowJar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"Sheeepen":{"java":927,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":9}},"authorContributionVariance":{"Sheeepen":52213.504},"authorDisplayNameMap":{"Sheeepen":"CS2103T-W13-4 STEP..G XI"}} diff --git a/SimWPEric_ip_master/authorship.json b/SimWPEric_ip_master/authorship.json index 8d0bb84f..42bfcc4c 100644 --- a/SimWPEric_ip_master/authorship.json +++ b/SimWPEric_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SimWPEric":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":"SimWPEric"},"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":"SimWPEric"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"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":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":6,"-":41}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeDatabaseNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" * The main class for the Duke task management application.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" * Constructor for Duke, which instantiates the ui, storage and taskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" * @param filePath The specified filePath of the database.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" this.taskList \u003d new TaskList(storage.loadData());","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeDatabaseNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" * Runs the Duke chat application.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" this.ui.showGreetMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" String userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" Command c \u003d Parser.parseUserInput(userInput);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" this.ui.showError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-18"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-18"},{"lineNumber":54,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":56,"author":{"gitId":"SimWPEric"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"SimWPEric":54,"-":4}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * The abstract base class for all commands that can be executed in Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" * Checks if executing this command should exit the Duke application.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * @return true if the command is an exit command, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" * Executes the command with the given task list, user interface, and storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" * @param taskList The list of tasks managed by Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" * @param storage The storage component for saving and loading tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" public abstract void execute(TaskList taskList, Ui ui, Storage storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":28}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to add a deadline task to Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" * Constructs a DeadlineCommand with the specified description and due date.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" * @param by The due date of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" public DeadlineCommand(String description, LocalDate by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" ui.showDeadlineMessage(taskList.addDeadline(this.description, this.by), taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":38}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeNoTaskFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to delete a task from Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * Constructs a DeleteCommand with the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" ui.showDeleteMessage(taskList.delete(this.index), taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeNoTaskFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":37}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to add a event task to Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" private LocalDate from;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" private LocalDate to;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" * Constructs an EventCommand with the specified description, start date, and end date.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" * @param from The start date of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" * @param to The end date of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" public EventCommand(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" ui.showEventMessage(taskList.addEvent(this.description, this.from, this.to), taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":40}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to exit Duke\u0027s task management application.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" storage.saveData(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" ui.showExitMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":22}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to find and display tasks in Duke\u0027s task list that match a specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" private String target;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" * Constructs a FindCommand with the specified keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" * @param target The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" public FindCommand(String target) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" this.target \u003d target;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" ui.showFilteredTasks(taskList.find(this.target));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":32}},{"path":"src/main/java/duke/command/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to display a help message with instructions on how to use Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" ui.showHelpMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":21}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to list and display all tasks in Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" ui.showListMessage(taskList.find(\"\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":21}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeNoTaskFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to mark a task as done in Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * Constructs a MarkCommand with the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" ui.showMarkMessage(taskList.markAsDone(this.index));","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeNoTaskFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":37}},{"path":"src/main/java/duke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to add a todo task to Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" * Constructs a TodoCommand with the specified description.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" ui.showTodoMessage(taskList.addTodo(this.description), taskList.getSize());","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":32}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeNoTaskFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to unmark a task in Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * Constructs an UnmarkCommand with the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to be marked as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" public void execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" ui.showUnmarkMessage(taskList.markAsUndone(this.index));","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeNoTaskFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" ui.showError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":38}},{"path":"src/main/java/duke/exception/DukeDatabaseInvalidEntryException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters invalid entry in database.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeDatabaseInvalidEntryException extends DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"There are invalid entries in your database ! :-(\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"SimWPEric":12}},{"path":"src/main/java/duke/exception/DukeDatabaseNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters missing database.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeDatabaseNotFoundException extends DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"Database not found ! :-(\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":12}},{"path":"src/main/java/duke/exception/DukeEndDateBeforeStartDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters invalid start and end date for Event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeEndDateBeforeStartDateException extends DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"Your start date cannot be after your end date :-(\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"SimWPEric":11}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * The base abstract class for custom exceptions.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public abstract class DukeException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Returns a common error message for Duke exceptions.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" * @return A String representation of the error message.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" return \"OOPS!!! \";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":17}},{"path":"src/main/java/duke/exception/DukeInvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters invalid arguments from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeInvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"You provided invalid arguments :-(\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":12}},{"path":"src/main/java/duke/exception/DukeInvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters invalid date format.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeInvalidDateFormatException extends DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"Please enter a date of format yyyy-mm-dd eg: 2023-09-26 :-(\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"SimWPEric":12}},{"path":"src/main/java/duke/exception/DukeNoTaskFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters invalid index for TaskList operations.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeNoTaskFoundException extends DukeException {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"No such task found :-(\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":12}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"import duke.command.HelpCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":"import duke.command.TodoCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeDatabaseInvalidEntryException;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeEndDateBeforeStartDateException;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeInvalidArgumentException;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeInvalidDateFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" * Parses user input and database entries.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" * Parses a database entry and extracts relevant information.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" * @param entry The database entry to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" * @return An ArrayList containing the elements extracted from the database entry.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeDatabaseInvalidEntryException If the database entry format is invalid.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" public static ArrayList\u003cString\u003e parseDatabaseEntry(String entry) throws DukeDatabaseInvalidEntryException {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cString\u003e elements \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" Pattern pattern \u003d Pattern.compile(","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" \"\\\\[([A-Z])\\\\]\\\\[(.)\\\\] (.+?)(?: \\\\(by: (.+?)\\\\)| \\\\(from: (.+?) to: (.+?)\\\\))?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":" Matcher matcher \u003d pattern.matcher(entry);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(1));","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(2));","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(3));","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" if (matcher.group(4) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(4));","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" } else if (matcher.group(5) !\u003d null \u0026\u0026 matcher.group(6) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(5));","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(6));","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"SimWPEric"},"content":" throw new DukeDatabaseInvalidEntryException();","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"SimWPEric"},"content":" return elements;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"SimWPEric"},"content":" * Parses user input and generates the appropriate command for Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"SimWPEric"},"content":" * @param input The user\u0027s input command.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SimWPEric"},"content":" * @return The corresponding Command object based on the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeInvalidArgumentException If the input does not match any valid command format.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeInvalidDateFormatException If the input contains an invalid date format.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeEndDateBeforeStartDateException If an event\u0027s end date is before its start date.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"SimWPEric"},"content":" public static Command parseUserInput(String input) throws DukeInvalidArgumentException,","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"SimWPEric"},"content":" DukeInvalidDateFormatException, DukeEndDateBeforeStartDateException {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"SimWPEric"},"content":" String byePattern \u003d \"bye\";","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"SimWPEric"},"content":" String listPattern \u003d \"list\";","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"SimWPEric"},"content":" String helpPattern \u003d \"help\";","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"SimWPEric"},"content":" String todoPattern \u003d \"todo (.+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"SimWPEric"},"content":" String deadlinePattern \u003d \"deadline (.+) /by (.+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"SimWPEric"},"content":" String eventPattern \u003d \"event (.+) /from (.+) /to (.+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"SimWPEric"},"content":" String markPattern \u003d \"mark (\\\\d+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"SimWPEric"},"content":" String unmarkPattern \u003d \"unmark (\\\\d+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"SimWPEric"},"content":" String deletePattern \u003d \"delete (\\\\d+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"SimWPEric"},"content":" String findPattern \u003d \"find ([a-zA-Z0-9]+)\";","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"SimWPEric"},"content":" if (input.matches(byePattern)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"SimWPEric"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"SimWPEric"},"content":" } else if (input.matches(listPattern)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"SimWPEric"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"SimWPEric"},"content":" } else if (input.matches(helpPattern)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"SimWPEric"},"content":" return new HelpCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"SimWPEric"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"SimWPEric"},"content":" Matcher matcher;","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(todoPattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"SimWPEric"},"content":" String description \u003d matcher.group(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"SimWPEric"},"content":" return new TodoCommand(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(deadlinePattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"SimWPEric"},"content":" String description \u003d matcher.group(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"SimWPEric"},"content":" LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"SimWPEric"},"content":" by \u003d LocalDate.parse(matcher.group(2));","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"SimWPEric"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidDateFormatException();","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"SimWPEric"},"content":" return new DeadlineCommand(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(eventPattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"SimWPEric"},"content":" String description \u003d matcher.group(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"SimWPEric"},"content":" LocalDate from;","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"SimWPEric"},"content":" LocalDate to;","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"SimWPEric"},"content":" from \u003d LocalDate.parse(matcher.group(2));","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"SimWPEric"},"content":" to \u003d LocalDate.parse(matcher.group(3));","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"SimWPEric"},"content":" if (to.isBefore(from)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"SimWPEric"},"content":" throw new DukeEndDateBeforeStartDateException();","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"SimWPEric"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidDateFormatException();","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"SimWPEric"},"content":" return new EventCommand(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(markPattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"SimWPEric"},"content":" int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"SimWPEric"},"content":" index \u003d Integer.parseInt(matcher.group(1));","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"SimWPEric"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"SimWPEric"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(unmarkPattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"SimWPEric"},"content":" int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"SimWPEric"},"content":" index \u003d Integer.parseInt(matcher.group(1));","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"SimWPEric"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"SimWPEric"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(deletePattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"SimWPEric"},"content":" int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"SimWPEric"},"content":" index \u003d Integer.parseInt(matcher.group(1));","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"SimWPEric"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"SimWPEric"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(findPattern).matcher(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"SimWPEric"},"content":" return new FindCommand(matcher.group(1));","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":166}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeDatabaseInvalidEntryException;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeDatabaseNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeEndDateBeforeStartDateException;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" * Handles the loading and storing of tasks from and to the data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" private String filepath;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" * Constructor for Storage with specified filepath.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" * @param filepath The filepath where the data is stored.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" * Loads task data from the data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" * @return An ArrayList of tasks loaded from the data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeDatabaseNotFoundException If the data file is not found.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" public ArrayList\u003cTask\u003e loadData() throws DukeDatabaseNotFoundException {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" File file \u003d new File(this.filepath);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":" Scanner fileReader \u003d new Scanner(file);","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" while (fileReader.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":" String entry \u003d fileReader.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cString\u003e parsedEntry \u003d Parser.parseDatabaseEntry(entry);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"SimWPEric"},"content":" taskList.add(readEntry(parsedEntry));","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeDatabaseInvalidEntryException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"SimWPEric"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeEndDateBeforeStartDateException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"SimWPEric"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"SimWPEric"},"content":" fileReader.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"SimWPEric"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"SimWPEric"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"SimWPEric"},"content":" throw new DukeDatabaseNotFoundException();","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"SimWPEric"},"content":" * Saves the TaskList to the data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"SimWPEric"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"SimWPEric"},"content":" public void saveData(TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"SimWPEric"},"content":" createDataDirectory();","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"SimWPEric"},"content":" createDukeFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"SimWPEric"},"content":" writeTaskListToFile(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"SimWPEric"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"SimWPEric"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"SimWPEric"},"content":" private Task readEntry(ArrayList\u003cString\u003e parsedEntry) throws DukeDatabaseInvalidEntryException,","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"SimWPEric"},"content":" DukeEndDateBeforeStartDateException {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"SimWPEric"},"content":" Task newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"SimWPEric"},"content":" switch (parsedEntry.get(0)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"SimWPEric"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"SimWPEric"},"content":" newTask \u003d new Todo(parsedEntry.get(2));","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"SimWPEric"},"content":" if (parsedEntry.get(1).equals(\"X\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"SimWPEric"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"SimWPEric"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"SimWPEric"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"SimWPEric"},"content":" newTask \u003d new Deadline(parsedEntry.get(2), formatDate(parsedEntry.get(3)));","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"SimWPEric"},"content":" if (parsedEntry.get(1).equals(\"X\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"SimWPEric"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"SimWPEric"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"SimWPEric"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"SimWPEric"},"content":" newTask \u003d new Event(parsedEntry.get(2), formatDate(parsedEntry.get(3)),","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"SimWPEric"},"content":" formatDate(parsedEntry.get(4)));","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"SimWPEric"},"content":" if (parsedEntry.get(1).equals(\"X\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"SimWPEric"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"SimWPEric"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"SimWPEric"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"SimWPEric"},"content":" throw new DukeDatabaseInvalidEntryException();","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"SimWPEric"},"content":" return newTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"SimWPEric"},"content":" private void createDataDirectory() throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"SimWPEric"},"content":" File dataDirectory \u003d new File(this.filepath).getParentFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"SimWPEric"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"SimWPEric"},"content":" if (!dataDirectory.mkdirs()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"SimWPEric"},"content":" throw new IOException(\"Failed to create data directory\");","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"SimWPEric"},"content":" private void createDukeFile() throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"SimWPEric"},"content":" File dukeFile \u003d new File(this.filepath);","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"SimWPEric"},"content":" if (!dukeFile.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"SimWPEric"},"content":" if (!dukeFile.createNewFile()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"SimWPEric"},"content":" throw new IOException(\"Failed to create duke file\");","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"SimWPEric"},"content":" private void writeTaskListToFile(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"SimWPEric"},"content":" Path filePath \u003d Paths.get(this.filepath);","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"SimWPEric"},"content":" Files.deleteIfExists(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"SimWPEric"},"content":" BufferedWriter writer \u003d Files.newBufferedWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"SimWPEric"},"content":" for (String taskString : taskList.stringify()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"SimWPEric"},"content":" writer.write(taskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"SimWPEric"},"content":" writer.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"SimWPEric"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"SimWPEric"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"SimWPEric"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"SimWPEric"},"content":" * Converts a date string in \"MMM dd yyyy\" format (eg: Oct 15 2019) to LocalDate.","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"SimWPEric"},"content":" * @param inputDate The date string in \"MMM dd yyyy\" format.","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"SimWPEric"},"content":" * @return The LocalDate representation of the input date.","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"SimWPEric"},"content":" public LocalDate formatDate(String inputDate) {","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"SimWPEric"},"content":" return LocalDate.parse(inputDate, DateTimeFormatter.ofPattern(\"MMM d yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"SimWPEric":156}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" * Constructor for Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * @param description String describing the Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" * @param by Deadline date in MMM DD YYYY format.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" * Returns a string representation of the Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" * @return string representation of the Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" String msg \u003d \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\", Locale.ENGLISH)) + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" return msg;","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":35}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents an Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" * Constructor for Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" * @param description String describing the Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * @param start Start date in MMM DD YYYY format.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" * @param end End date in MMM DD YYYY format.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" public Event(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" * Returns a string representation of the Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" * @return string representation of the Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" String msg \u003d \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" + \" to: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" + this.end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\", Locale.ENGLISH)) + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" return msg;","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":40}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * The abstract base class for tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":" private String description;","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" * Constructor for task.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" * @param description A String describing the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" * @return String description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" return this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" * Marks the task done.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" * Marks the task undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" * Returns a string representation of the Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" * @return string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" String msg \u003d \"[\" + (isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" msg \u003d msg + \" \" + this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":" return msg;","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":53}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeNoTaskFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"public class TaskList {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" * Constructs a TaskList with the given list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" * @param taskList An ArrayList of tasks to initialise the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" * Adds a new todo task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" * @return The added todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" public Task addTodo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" Task todo \u003d new Todo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" this.taskList.add(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" return todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" * Adds a new deadline task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" * @param by The due date of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" * @return The added deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" public Task addDeadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" Task deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":" this.taskList.add(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" return deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"SimWPEric"},"content":" * Adds a new event task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"SimWPEric"},"content":" * @param from The start date of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"SimWPEric"},"content":" * @param to The end date of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"SimWPEric"},"content":" * @return The added event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"SimWPEric"},"content":" public Task addEvent(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SimWPEric"},"content":" Task event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"SimWPEric"},"content":" this.taskList.add(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"SimWPEric"},"content":" return event;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":68,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"SimWPEric"},"content":" * Marks a task at the specified index as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"SimWPEric"},"content":" * @return The marked task.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeNoTaskFoundException If the task is not found at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"SimWPEric"},"content":" public Task markAsDone(int index) throws DukeNoTaskFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":78,"author":{"gitId":"SimWPEric"},"content":" Task task \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"SimWPEric"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"SimWPEric"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"SimWPEric"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":82,"author":{"gitId":"SimWPEric"},"content":" throw new DukeNoTaskFoundException();","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":84,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":85,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":86,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"SimWPEric"},"content":" * Marks a task at the specified index as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to mark as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"SimWPEric"},"content":" * @return The marked task.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeNoTaskFoundException If the task is not found at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"SimWPEric"},"content":" public Task markAsUndone(int index) throws DukeNoTaskFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":95,"author":{"gitId":"SimWPEric"},"content":" Task task \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"SimWPEric"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"SimWPEric"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"SimWPEric"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":99,"author":{"gitId":"SimWPEric"},"content":" throw new DukeNoTaskFoundException();","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":101,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":102,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":103,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"SimWPEric"},"content":" * Deletes a task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"SimWPEric"},"content":" * @return The deleted task.","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeNoTaskFoundException If the task is not found at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"SimWPEric"},"content":" public Task delete(int index) throws DukeNoTaskFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":113,"author":{"gitId":"SimWPEric"},"content":" Task task \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"SimWPEric"},"content":" this.taskList.remove(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"SimWPEric"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"SimWPEric"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":117,"author":{"gitId":"SimWPEric"},"content":" throw new DukeNoTaskFoundException();","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":119,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":120,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"SimWPEric"},"content":" * Finds and returns a list of tasks that contain the specified target keyword in their descriptions.","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"SimWPEric"},"content":" * @param target The target keyword to search for in task descriptions.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"SimWPEric"},"content":" * @return An ArrayList of tasks that match the search criteria.","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"SimWPEric"},"content":" public ArrayList\u003cTask\u003e find(String target) {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cTask\u003e filteredTask \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"SimWPEric"},"content":" for (Task task : this.taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"SimWPEric"},"content":" if (task.getDescription().contains(target)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"SimWPEric"},"content":" filteredTask.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"SimWPEric"},"content":" return filteredTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"SimWPEric"},"content":" * Retrieves the number of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"SimWPEric"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"SimWPEric"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"SimWPEric"},"content":" return this.taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"SimWPEric"},"content":" * Converts the task list to an ArrayList of string representations of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"SimWPEric"},"content":" * @return An ArrayList of strings representing the tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"SimWPEric"},"content":" public ArrayList\u003cString\u003e stringify() {","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cString\u003e stringList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"SimWPEric"},"content":" for (Task task : this.taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"SimWPEric"},"content":" stringList.add(task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"SimWPEric"},"content":" return stringList;","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":158}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents a Todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Constructor for Todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" * @param description String describing the Todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * Returns a string representation of the Todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" * @return string representation of the Todo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" String msg \u003d \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" return msg;","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":27}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Handles user interface interactions and displays messages to the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" private static final int BOX_WIDTH \u003d 85;","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * Displays a message to the user with a framed border.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * @param messages The messages to be displayed.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" public void showToUser(String... messages) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" System.out.println(\"+\" + \"-\".repeat(BOX_WIDTH - 2) + \"+\");","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" for (String message : messages) {","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" String[] lines \u003d message.split(\"\\n\");","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" for (String line : lines) {","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" StringBuilder paddedLine \u003d new StringBuilder(\"| \");","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" paddedLine.append(line);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" int paddingLength \u003d BOX_WIDTH - 4 - line.length();","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" if (paddingLength \u003e 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" paddedLine.append(\" \".repeat(paddingLength));","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" paddedLine.append(\" |\");","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" System.out.println(paddedLine);","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" System.out.println(\"+\" + \"-\".repeat(BOX_WIDTH - 2) + \"+\");","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":" * Displays a greeting message to the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" public void showGreetMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" \"Hello! I\u0027m Atlas\",","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" \"What can I do for you?\",","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" \"Type \u0027help\u0027 to view available commands\"","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" * Displays an exit message to the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"SimWPEric"},"content":" public void showExitMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"SimWPEric"},"content":" \"Bye. Hope to see you again soon!\"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"SimWPEric"},"content":" * Displays a help message to the user, listing available commands.","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"SimWPEric"},"content":" public void showHelpMessage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"SimWPEric"},"content":" \"Here are the available commands:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"SimWPEric"},"content":" \"1. bye - Exit the program\",","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"SimWPEric"},"content":" \"2. list - List all tasks\",","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"SimWPEric"},"content":" \"3. mark \u003ctaskNumber\u003e - Mark a task as done\",","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"SimWPEric"},"content":" \"4. unmark \u003ctaskNumber\u003e - Mark a task as undone\",","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"SimWPEric"},"content":" \"5. delete \u003ctaskNumber\u003e - Delete a task\",","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"SimWPEric"},"content":" \"6. todo \u003cdescription\u003e - Add a new todo task\",","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"SimWPEric"},"content":" \"7. deadline \u003cdescription\u003e /by \u003cdueDate\u003e - Add a new deadline task\",","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"SimWPEric"},"content":" \"8. event \u003cdescription\u003e /from \u003cstartDate\u003e /to \u003cendDate\u003e - Add a new event task\",","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"SimWPEric"},"content":" \"9. help - Displays the available commands\",","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"SimWPEric"},"content":" \"10. find \u003ckeyword\u003e - Search for tasks with a keyword\"","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the successful addition of a Todo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"SimWPEric"},"content":" * @param task The Todo task added.","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"SimWPEric"},"content":" * @param size The updated size of the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"SimWPEric"},"content":" public void showTodoMessage(Task task, int size) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"SimWPEric"},"content":" \"Got it. I\u0027ve added this task:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":88,"author":{"gitId":"SimWPEric"},"content":" task.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"SimWPEric"},"content":" \"Now you have \" + size + \" task\" + (size \u003c\u003d 1 ? \"\" : \"s\") + \" in the list.\"","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the successful addition of a Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"SimWPEric"},"content":" * @param task The Deadline task added.","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"SimWPEric"},"content":" * @param size The updated size of the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"SimWPEric"},"content":" public void showDeadlineMessage(Task task, int size) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-27"},{"lineNumber":101,"author":{"gitId":"SimWPEric"},"content":" \"Got it. I\u0027ve added this deadline task:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"SimWPEric"},"content":" task.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"SimWPEric"},"content":" \"Now you have \" + size + \" task\" + (size \u003c\u003d 1 ? \"\" : \"s\") + \" in the list.\"","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the successful addition of a Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"SimWPEric"},"content":" * @param task The Event task added.","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"SimWPEric"},"content":" * @param size The updated size of the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"SimWPEric"},"content":" public void showEventMessage(Task task, int size) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"SimWPEric"},"content":" \"Got it. I\u0027ve added this event task:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"SimWPEric"},"content":" task.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"SimWPEric"},"content":" \"Now you have \" + size + \" task\" + (size \u003c\u003d 1 ? \"\" : \"s\") + \" in the list.\"","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the task is marked done.","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"SimWPEric"},"content":" * @param task The task that was marked done.","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"SimWPEric"},"content":" public void showMarkMessage(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"SimWPEric"},"content":" \"Nice! I\u0027ve marked this task as done:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"SimWPEric"},"content":" task.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the task is marked undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"SimWPEric"},"content":" * @param task The task that was marked undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"SimWPEric"},"content":" public void showUnmarkMessage(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"SimWPEric"},"content":" \"OK, I\u0027ve marked this task as not done yet:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"SimWPEric"},"content":" task.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the task is deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"SimWPEric"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"SimWPEric"},"content":" * @param size The updated size of the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"SimWPEric"},"content":" public void showDeleteMessage(Task task, int size) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"SimWPEric"},"content":" \"Noted. I\u0027ve removed this task:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"SimWPEric"},"content":" task.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"SimWPEric"},"content":" \"Now you have \" + size + \" task\" + (size \u003c\u003d 1 ? \"\" : \"s\") + \" in the list.\"","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":159,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"SimWPEric"},"content":" * Displays a message of the taskList indexed starting from 1.","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":162,"author":{"gitId":"SimWPEric"},"content":" * @param taskList The TaskList to display.","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"SimWPEric"},"content":" public void showListMessage(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cString\u003e msg \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"SimWPEric"},"content":" int num \u003d 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"SimWPEric"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":168,"author":{"gitId":"SimWPEric"},"content":" msg.add(num + \": \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"SimWPEric"},"content":" num++;","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"SimWPEric"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"SimWPEric"},"content":" msg.add(\"You have no task currently.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"SimWPEric"},"content":" msg.toArray(new String[0])","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"SimWPEric"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":181,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":182,"author":{"gitId":"SimWPEric"},"content":" * @param e The DukeException representing the error.","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":184,"author":{"gitId":"SimWPEric"},"content":" public void showError(DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"SimWPEric"},"content":" e.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":190,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"SimWPEric"},"content":" * Displays a message of the filtered taskList indexed starting from 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"SimWPEric"},"content":" * @param filteredTasks The filtered TaskList to display.","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"SimWPEric"},"content":" public void showFilteredTasks(ArrayList\u003cTask\u003e filteredTasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cString\u003e msg \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":197,"author":{"gitId":"SimWPEric"},"content":" int num \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":198,"author":{"gitId":"SimWPEric"},"content":" for (Task task : filteredTasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":199,"author":{"gitId":"SimWPEric"},"content":" msg.add(num + \": \" + task);","lastModifiedDate":"2023-08-28"},{"lineNumber":200,"author":{"gitId":"SimWPEric"},"content":" num++;","lastModifiedDate":"2023-08-28"},{"lineNumber":201,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":202,"author":{"gitId":"SimWPEric"},"content":" if (filteredTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":203,"author":{"gitId":"SimWPEric"},"content":" msg.add(\"You have no matching task.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":204,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":205,"author":{"gitId":"SimWPEric"},"content":" showToUser(","lastModifiedDate":"2023-08-28"},{"lineNumber":206,"author":{"gitId":"SimWPEric"},"content":" msg.toArray(new String[0])","lastModifiedDate":"2023-08-28"},{"lineNumber":207,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":208,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":209,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":209}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" public void addDeadline_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" Deadline task \u003d new Deadline(\"CS2103T ip\", LocalDate.parse(\"2023-08-12\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[D][ ] CS2103T ip (by: Aug 12 2023)\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" public void markDeadline_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" Deadline task \u003d new Deadline(\"CS2103T ip\", LocalDate.parse(\"2023-08-12\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[D][X] CS2103T ip (by: Aug 12 2023)\");","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" public void unmarkDeadline_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" Deadline task \u003d new Deadline(\"CS2103T ip\", LocalDate.parse(\"2023-08-12\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[D][ ] CS2103T ip (by: Aug 12 2023)\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":30}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"public class EventTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" public void addEvent_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" Event task \u003d new Event(\"career fair\", LocalDate.parse(\"2023-08-10\"), LocalDate.parse(\"2023-08-11\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[E][ ] career fair (from: Aug 10 2023 to: Aug 11 2023)\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":15}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public void addTodo_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" Todo task \u003d new Todo(\"CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[T][ ] CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" public void markTodo_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" Todo task \u003d new Todo(\"CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[T][X] CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" public void unmarkTodo_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" Todo task \u003d new Todo(\"CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[T][ ] CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":28}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"todo borrow book","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"mark 1","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"mark","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"mark 4","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"mark a","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"unmark","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"unmark 4","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"unmark a","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"delete","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"delete 4","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"delete a","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"delete 1","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"todo","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":"deadline","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":"event","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"# duke.Duke project template","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"3. After that, locate the `src/main/java/duke.Duke.java` file, right-click it, and choose `Run duke.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"SimWPEric":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":"SimWPEric"},"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":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" mainClass.set(\"duke.Launcher\")","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":54,"author":{"gitId":"-"},"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":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"SimWPEric"},"content":"checkstyle {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"SimWPEric"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":21,"-":41}},{"path":"src/main/java/duke/DialogBox.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.util.Collections;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"import javafx.geometry.Pos;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.Node;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.image.ImageView;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * An example of a custom control using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"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":"SimWPEric"},"content":" * containing text from the speaker.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"public class DialogBox extends HBox {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" private Label dialog;","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" private ImageView displayPicture;","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" private DialogBox(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(MainWindow.class.getResource(\"/view/DialogBox.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" fxmlLoader.setController(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" fxmlLoader.setRoot(this);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" dialog.setText(text);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" displayPicture.setImage(img);","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" * Flips the dialog box such that the ImageView is on the left and text on the right.","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" private void flip() {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" ObservableList\u003cNode\u003e tmp \u003d FXCollections.observableArrayList(this.getChildren());","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" Collections.reverse(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" getChildren().setAll(tmp);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" public static DialogBox getUserDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":" return new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"SimWPEric"},"content":" public static DialogBox getDukeDialog(String text, Image img) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"SimWPEric"},"content":" var db \u003d new DialogBox(text, img);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"SimWPEric"},"content":" db.flip();","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"SimWPEric"},"content":" return db;","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"SimWPEric":62}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeDatabaseNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" * The main class for the Duke task management application.","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" private Storage storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" private String filePath \u003d \"data/tasks.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" * Constructor for Duke, which instantiates the ui, storage and taskList.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" * @param filePath The specified filePath of the database.","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" public Duke() {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" this.taskList \u003d new TaskList(storage.loadData());","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeDatabaseNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" this.taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" public String getResponse(String input) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" Command c \u003d Parser.parseUserInput(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" return c.execute(taskList, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" return this.ui.showError(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-18"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-18"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"SimWPEric":42,"-":2}},{"path":"src/main/java/duke/Launcher.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":" * A launcher class to workaround classpath issues.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"public class Launcher {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" Application.launch(Main.class, args);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"SimWPEric":13}},{"path":"src/main/java/duke/Main.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import javafx.fxml.FXMLLoader;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" * A GUI for Duke using FXML.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"public class Main extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" private Duke duke \u003d new Duke();","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" stage.setResizable(false);","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" stage.setTitle(\"Duke ChatBot\");","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" FXMLLoader fxmlLoader \u003d new FXMLLoader(Main.class.getResource(\"/view/MainWindow.fxml\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" AnchorPane ap \u003d fxmlLoader.load();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" Scene scene \u003d new Scene(ap);","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" fxmlLoader.\u003cMainWindow\u003egetController().setDuke(duke);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"SimWPEric":34}},{"path":"src/main/java/duke/MainWindow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.util.Timer;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.util.TimerTask;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import javafx.application.Platform;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.control.Button;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.control.TextField;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.image.Image;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.layout.AnchorPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" * Controller for MainWindow. Provides the layout for the other controls.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"public class MainWindow extends AnchorPane {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" private ScrollPane scrollPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" private VBox dialogContainer;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" private TextField userInput;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" private Button sendButton;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" private Duke duke;","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" private Image userImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaUser.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" private Image dukeImage \u003d new Image(this.getClass().getResourceAsStream(\"/images/DaDuke.png\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" * Initialises the chat container, and displays greet message.","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" public void initialize() {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" scrollPane.vvalueProperty().bind(dialogContainer.heightProperty());","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" DialogBox.getDukeDialog(\"Hello! I\u0027m TopG\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" + \"What can I do for you?\\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":" + \"Type \u0027help\u0027 to view available commands\",","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" public void setDuke(Duke d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" duke \u003d d;","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"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":52,"author":{"gitId":"SimWPEric"},"content":" * the dialog container. Clears the user input after processing.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"SimWPEric"},"content":" @FXML","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"SimWPEric"},"content":" private void handleUserInput() {","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"SimWPEric"},"content":" String input \u003d userInput.getText();","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"SimWPEric"},"content":" String response \u003d duke.getResponse(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"SimWPEric"},"content":" dialogContainer.getChildren().addAll(","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"SimWPEric"},"content":" DialogBox.getUserDialog(input, userImage),","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"SimWPEric"},"content":" DialogBox.getDukeDialog(response, dukeImage)","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"SimWPEric"},"content":" // Closes the GUI","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"SimWPEric"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"SimWPEric"},"content":" TimerTask exitTask \u003d new TimerTask() {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"SimWPEric"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"SimWPEric"},"content":" Platform.exit();","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"SimWPEric"},"content":" };","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"SimWPEric"},"content":" Timer timer \u003d new Timer(\"Delay\");","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"SimWPEric"},"content":" timer.schedule(exitTask, 1200L);","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"SimWPEric"},"content":" userInput.clear();","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"SimWPEric":78}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * The abstract base class for all commands that can be executed in Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" * Checks if executing this command should exit the Duke application.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * @return true if the command is an exit command, false otherwise.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" * Executes the command with the given task list, user interface, and storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" * @param taskList The list of tasks managed by Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" * @param storage The storage component for saving and loading tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" public abstract String execute(TaskList taskList, Ui ui, Storage storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":28}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to add a deadline task to Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" * Constructs a DeadlineCommand with the specified description and due date.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" * @param by The due date of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" public DeadlineCommand(String description, LocalDate by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" return ui.showDeadlineMessage(taskList.addDeadline(this.description, this.by), taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":38}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeNoTaskFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to delete a task from Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * Constructs a DeleteCommand with the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to be deleted.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" return ui.showDeleteMessage(taskList.delete(this.index), taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeNoTaskFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" return ui.showError(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":37}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to add a event task to Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" private LocalDate from;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" private LocalDate to;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" * Constructs an EventCommand with the specified description, start date, and end date.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" * @param from The start date of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" * @param to The end date of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" public EventCommand(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" return ui.showEventMessage(taskList.addEvent(this.description, this.from, this.to), taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":40}},{"path":"src/main/java/duke/command/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to exit Duke\u0027s task management application.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" storage.saveData(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" return ui.showExitMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":22}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to find and display tasks in Duke\u0027s task list that match a specified keyword.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" private String target;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" * Constructs a FindCommand with the specified keyword to search for.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" * @param target The keyword to search for in task descriptions.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" public FindCommand(String target) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" this.target \u003d target;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" return ui.showFilteredTasks(taskList.find(this.target));","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":32}},{"path":"src/main/java/duke/command/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to display a help message with instructions on how to use Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" return ui.showHelpMessage();","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":21}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to list and display all tasks in Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" return ui.showListMessage(taskList.find(\"\"));","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":21}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeNoTaskFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to mark a task as done in Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * Constructs a MarkCommand with the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to be marked as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" return ui.showMarkMessage(taskList.markAsDone(this.index));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeNoTaskFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" return ui.showError(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":37}},{"path":"src/main/java/duke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to add a todo task to Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" * Constructs a TodoCommand with the specified description.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" return ui.showTodoMessage(taskList.addTodo(this.description), taskList.getSize());","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":32}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeNoTaskFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Represents a command to unmark a task in Duke\u0027s task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * Constructs an UnmarkCommand with the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to be marked as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" public String execute(TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" return ui.showUnmarkMessage(taskList.markAsUndone(this.index));","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeNoTaskFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" return ui.showError(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SimWPEric":38}},{"path":"src/main/java/duke/exception/DukeDatabaseInvalidEntryException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters invalid entry in database.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeDatabaseInvalidEntryException extends DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"There are invalid entries in your database ! :-(\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"SimWPEric":12}},{"path":"src/main/java/duke/exception/DukeDatabaseNotFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters missing database.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeDatabaseNotFoundException extends DukeException {","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"Database not found ! :-(\\n\";","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":12}},{"path":"src/main/java/duke/exception/DukeEndDateBeforeStartDateException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters invalid start and end date for Event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeEndDateBeforeStartDateException extends DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"Your start date cannot be after your end date :-(\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"SimWPEric":11}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * The base abstract class for custom exceptions.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public abstract class DukeException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Returns a common error message for Duke exceptions.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" * @return A String representation of the error message.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" return \"OOPS!!! \";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":17}},{"path":"src/main/java/duke/exception/DukeInvalidArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters invalid arguments from user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeInvalidArgumentException extends DukeException {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"You provided invalid arguments :-(\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":12}},{"path":"src/main/java/duke/exception/DukeInvalidDateFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters invalid date format.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeInvalidDateFormatException extends DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"Please enter a date of format yyyy-mm-dd eg: 2023-09-26 :-(\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"SimWPEric":12}},{"path":"src/main/java/duke/exception/DukeNoTaskFoundException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.exception;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents an error when Duke encounters invalid index for TaskList operations.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class DukeNoTaskFoundException extends DukeException {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" return super.toString() + \"No such task found :-(\\n\";","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":12}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"import duke.command.DeadlineCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"import duke.command.EventCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"import duke.command.ExitCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"import duke.command.HelpCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":"import duke.command.TodoCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":"import duke.command.UnmarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeDatabaseInvalidEntryException;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeEndDateBeforeStartDateException;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeInvalidArgumentException;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeInvalidDateFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" * Parses user input and database entries.","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"public class Parser {","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" * Parses a database entry and extracts relevant information.","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" * @param entry The database entry to be parsed.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" * @return An ArrayList containing the elements extracted from the database entry.","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeDatabaseInvalidEntryException If the database entry format is invalid.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" public static ArrayList\u003cString\u003e parseDatabaseEntry(String entry) throws DukeDatabaseInvalidEntryException {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cString\u003e elements \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" Pattern pattern \u003d Pattern.compile(","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" \"\\\\[([A-Z])\\\\]\\\\[(.)\\\\] (.+?)(?: \\\\(by: (.+?)\\\\)| \\\\(from: (.+?) to: (.+?)\\\\))?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":" Matcher matcher \u003d pattern.matcher(entry);","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(1));","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(2));","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(3));","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" if (matcher.group(4) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(4));","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" } else if (matcher.group(5) !\u003d null \u0026\u0026 matcher.group(6) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(5));","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":" elements.add(matcher.group(6));","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"SimWPEric"},"content":" throw new DukeDatabaseInvalidEntryException();","lastModifiedDate":"2023-08-27"},{"lineNumber":55,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"SimWPEric"},"content":" return elements;","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"SimWPEric"},"content":" * Parses user input and generates the appropriate command for Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"SimWPEric"},"content":" * @param input The user\u0027s input command.","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SimWPEric"},"content":" * @return The corresponding Command object based on the user input.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeInvalidArgumentException If the input does not match any valid command format.","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeInvalidDateFormatException If the input contains an invalid date format.","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeEndDateBeforeStartDateException If an event\u0027s end date is before its start date.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"SimWPEric"},"content":" public static Command parseUserInput(String input) throws DukeInvalidArgumentException,","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"SimWPEric"},"content":" DukeInvalidDateFormatException, DukeEndDateBeforeStartDateException {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"SimWPEric"},"content":" String byePattern \u003d \"bye\";","lastModifiedDate":"2023-08-27"},{"lineNumber":72,"author":{"gitId":"SimWPEric"},"content":" String listPattern \u003d \"list\";","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"SimWPEric"},"content":" String helpPattern \u003d \"help\";","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"SimWPEric"},"content":" String todoPattern \u003d \"todo (.+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":75,"author":{"gitId":"SimWPEric"},"content":" String deadlinePattern \u003d \"deadline (.+) /by (.+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"SimWPEric"},"content":" String eventPattern \u003d \"event (.+) /from (.+) /to (.+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"SimWPEric"},"content":" String markPattern \u003d \"mark (\\\\d+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"SimWPEric"},"content":" String unmarkPattern \u003d \"unmark (\\\\d+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"SimWPEric"},"content":" String deletePattern \u003d \"delete (\\\\d+)\";","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"SimWPEric"},"content":" String findPattern \u003d \"find ([a-zA-Z0-9]+)\";","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"SimWPEric"},"content":" if (input.matches(byePattern)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"SimWPEric"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"SimWPEric"},"content":" } else if (input.matches(listPattern)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"SimWPEric"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"SimWPEric"},"content":" } else if (input.matches(helpPattern)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"SimWPEric"},"content":" return new HelpCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"SimWPEric"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"SimWPEric"},"content":" Matcher matcher;","lastModifiedDate":"2023-08-27"},{"lineNumber":90,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(todoPattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"SimWPEric"},"content":" String description \u003d matcher.group(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"SimWPEric"},"content":" return new TodoCommand(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(deadlinePattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"SimWPEric"},"content":" String description \u003d matcher.group(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"SimWPEric"},"content":" LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"SimWPEric"},"content":" by \u003d LocalDate.parse(matcher.group(2));","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"SimWPEric"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidDateFormatException();","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"SimWPEric"},"content":" return new DeadlineCommand(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(eventPattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"SimWPEric"},"content":" String description \u003d matcher.group(1);","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"SimWPEric"},"content":" LocalDate from;","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"SimWPEric"},"content":" LocalDate to;","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"SimWPEric"},"content":" from \u003d LocalDate.parse(matcher.group(2));","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"SimWPEric"},"content":" to \u003d LocalDate.parse(matcher.group(3));","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"SimWPEric"},"content":" if (to.isBefore(from)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"SimWPEric"},"content":" throw new DukeEndDateBeforeStartDateException();","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"SimWPEric"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidDateFormatException();","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"SimWPEric"},"content":" return new EventCommand(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(markPattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"SimWPEric"},"content":" int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"SimWPEric"},"content":" index \u003d Integer.parseInt(matcher.group(1));","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"SimWPEric"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"SimWPEric"},"content":" return new MarkCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(unmarkPattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"SimWPEric"},"content":" int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"SimWPEric"},"content":" index \u003d Integer.parseInt(matcher.group(1));","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"SimWPEric"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"SimWPEric"},"content":" return new UnmarkCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(deletePattern).matcher(input);","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"SimWPEric"},"content":" int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"SimWPEric"},"content":" index \u003d Integer.parseInt(matcher.group(1));","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"SimWPEric"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"SimWPEric"},"content":" return new DeleteCommand(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":158,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"SimWPEric"},"content":" matcher \u003d Pattern.compile(findPattern).matcher(input);","lastModifiedDate":"2023-08-28"},{"lineNumber":160,"author":{"gitId":"SimWPEric"},"content":" if (matcher.matches()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":161,"author":{"gitId":"SimWPEric"},"content":" return new FindCommand(matcher.group(1));","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":163,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":164,"author":{"gitId":"SimWPEric"},"content":" throw new DukeInvalidArgumentException();","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":166}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.storage;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"import java.util.Locale;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeDatabaseInvalidEntryException;","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeDatabaseNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeEndDateBeforeStartDateException;","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":"import duke.task.Event;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":"import duke.task.Todo;","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" * Handles the loading and storing of tasks from and to the data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":"public class Storage {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" private String filepath;","lastModifiedDate":"2023-08-27"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" * Constructor for Storage with specified filepath.","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" * @param filepath The filepath where the data is stored.","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" public Storage(String filepath) {","lastModifiedDate":"2023-08-27"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" this.filepath \u003d filepath;","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" * Loads task data from the data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" * @return An ArrayList of tasks loaded from the data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeDatabaseNotFoundException If the data file is not found.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" public ArrayList\u003cTask\u003e loadData() throws DukeDatabaseNotFoundException {","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" File file \u003d new File(this.filepath);","lastModifiedDate":"2023-08-27"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":" Scanner fileReader \u003d new Scanner(file);","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" while (fileReader.hasNextLine()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":" String entry \u003d fileReader.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cString\u003e parsedEntry \u003d Parser.parseDatabaseEntry(entry);","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"SimWPEric"},"content":" taskList.add(readEntry(parsedEntry));","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeDatabaseInvalidEntryException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":58,"author":{"gitId":"SimWPEric"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"SimWPEric"},"content":" } catch (DukeEndDateBeforeStartDateException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"SimWPEric"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"SimWPEric"},"content":" fileReader.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"SimWPEric"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"SimWPEric"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"SimWPEric"},"content":" throw new DukeDatabaseNotFoundException();","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":70,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"SimWPEric"},"content":" * Saves the TaskList to the data file.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"SimWPEric"},"content":" * @param taskList The TaskList containing the tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"SimWPEric"},"content":" public void saveData(TaskList taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"SimWPEric"},"content":" createDataDirectory();","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"SimWPEric"},"content":" createDukeFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"SimWPEric"},"content":" writeTaskListToFile(taskList);","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"SimWPEric"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"SimWPEric"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":84,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"SimWPEric"},"content":" private Task readEntry(ArrayList\u003cString\u003e parsedEntry) throws DukeDatabaseInvalidEntryException,","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"SimWPEric"},"content":" DukeEndDateBeforeStartDateException {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"SimWPEric"},"content":" Task newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"SimWPEric"},"content":" switch (parsedEntry.get(0)) {","lastModifiedDate":"2023-08-27"},{"lineNumber":89,"author":{"gitId":"SimWPEric"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"SimWPEric"},"content":" newTask \u003d new Todo(parsedEntry.get(2));","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"SimWPEric"},"content":" if (parsedEntry.get(1).equals(\"X\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"SimWPEric"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"SimWPEric"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"SimWPEric"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"SimWPEric"},"content":" newTask \u003d new Deadline(parsedEntry.get(2), formatDate(parsedEntry.get(3)));","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"SimWPEric"},"content":" if (parsedEntry.get(1).equals(\"X\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"SimWPEric"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"SimWPEric"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"SimWPEric"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"SimWPEric"},"content":" newTask \u003d new Event(parsedEntry.get(2), formatDate(parsedEntry.get(3)),","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"SimWPEric"},"content":" formatDate(parsedEntry.get(4)));","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"SimWPEric"},"content":" if (parsedEntry.get(1).equals(\"X\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"SimWPEric"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"SimWPEric"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"SimWPEric"},"content":" default:","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"SimWPEric"},"content":" throw new DukeDatabaseInvalidEntryException();","lastModifiedDate":"2023-08-27"},{"lineNumber":110,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"SimWPEric"},"content":" return newTask;","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":114,"author":{"gitId":"SimWPEric"},"content":" private void createDataDirectory() throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":115,"author":{"gitId":"SimWPEric"},"content":" File dataDirectory \u003d new File(this.filepath).getParentFile();","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"SimWPEric"},"content":" if (!dataDirectory.exists()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"SimWPEric"},"content":" if (!dataDirectory.mkdirs()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"SimWPEric"},"content":" throw new IOException(\"Failed to create data directory\");","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"SimWPEric"},"content":" private void createDukeFile() throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"SimWPEric"},"content":" File dukeFile \u003d new File(this.filepath);","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"SimWPEric"},"content":" if (!dukeFile.exists()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":126,"author":{"gitId":"SimWPEric"},"content":" if (!dukeFile.createNewFile()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"SimWPEric"},"content":" throw new IOException(\"Failed to create duke file\");","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"SimWPEric"},"content":" private void writeTaskListToFile(TaskList taskList) throws IOException {","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"SimWPEric"},"content":" Path filePath \u003d Paths.get(this.filepath);","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"SimWPEric"},"content":" Files.deleteIfExists(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"SimWPEric"},"content":" BufferedWriter writer \u003d Files.newBufferedWriter(filePath);","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"SimWPEric"},"content":" for (String taskString : taskList.stringify()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"SimWPEric"},"content":" writer.write(taskString);","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"SimWPEric"},"content":" writer.newLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"SimWPEric"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"SimWPEric"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"SimWPEric"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":148,"author":{"gitId":"SimWPEric"},"content":" * Converts a date string in \"MMM dd yyyy\" format (eg: Oct 15 2019) to LocalDate.","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":150,"author":{"gitId":"SimWPEric"},"content":" * @param inputDate The date string in \"MMM dd yyyy\" format.","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"SimWPEric"},"content":" * @return The LocalDate representation of the input date.","lastModifiedDate":"2023-08-28"},{"lineNumber":152,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":153,"author":{"gitId":"SimWPEric"},"content":" public LocalDate formatDate(String inputDate) {","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"SimWPEric"},"content":" return LocalDate.parse(inputDate, DateTimeFormatter.ofPattern(\"MMM d yyyy\", Locale.ENGLISH));","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"SimWPEric":156}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents a Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" * Constructor for Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * @param description String describing the Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" * @param by Deadline date in MMM DD YYYY format.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-19"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" * Returns a string representation of the Deadline.","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" * @return string representation of the Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" String msg \u003d \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" + this.by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\", Locale.ENGLISH)) + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" return msg;","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":35}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" * Represents an Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" private LocalDate start;","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" private LocalDate end;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" * Constructor for Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" * @param description String describing the Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * @param start Start date in MMM DD YYYY format.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" * @param end End date in MMM DD YYYY format.","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" public Event(String description, LocalDate start, LocalDate end) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" * Returns a string representation of the Event.","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" * @return string representation of the Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" String msg \u003d \"[E]\" + super.toString() + \" (from: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" + this.start.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\", Locale.ENGLISH))","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" + \" to: \"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" + this.end.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\", Locale.ENGLISH)) + \")\";","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" return msg;","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":40}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * The abstract base class for tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":" private String description;","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" * Constructor for task.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" * @param description A String describing the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" * @return String description of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" return this.description;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" * Marks the task done.","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-19"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" * Marks the task undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" * Returns a string representation of the Task.","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" * @return string representation of the task.","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" String msg \u003d \"[\" + (isDone ? \"X\" : \" \") + \"]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" msg \u003d msg + \" \" + this.description;","lastModifiedDate":"2023-08-19"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":" return msg;","lastModifiedDate":"2023-08-19"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":53}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeNoTaskFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Represents a list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"public class TaskList {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" * Constructs an empty TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" public TaskList() {","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" * Constructs a TaskList with the given list of tasks.","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" * @param taskList An ArrayList of tasks to initialise the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" * Adds a new todo task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":" * @return The added todo task.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" public Task addTodo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" Task todo \u003d new Todo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" this.taskList.add(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" return todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" * Adds a new deadline task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" * @param by The due date of the deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" * @return The added deadline task.","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" public Task addDeadline(String description, LocalDate by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" Task deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":" this.taskList.add(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" return deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":54,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":55,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"SimWPEric"},"content":" * Adds a new event task to the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"SimWPEric"},"content":" * @param description The description of the event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"SimWPEric"},"content":" * @param from The start date of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"SimWPEric"},"content":" * @param to The end date of the event.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"SimWPEric"},"content":" * @return The added event task.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"SimWPEric"},"content":" public Task addEvent(String description, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SimWPEric"},"content":" Task event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"SimWPEric"},"content":" this.taskList.add(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"SimWPEric"},"content":" return event;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":68,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"SimWPEric"},"content":" * Marks a task at the specified index as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to mark as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"SimWPEric"},"content":" * @return The marked task.","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeNoTaskFoundException If the task is not found at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"SimWPEric"},"content":" public Task markAsDone(int index) throws DukeNoTaskFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":78,"author":{"gitId":"SimWPEric"},"content":" Task task \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"SimWPEric"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"SimWPEric"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"SimWPEric"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":82,"author":{"gitId":"SimWPEric"},"content":" throw new DukeNoTaskFoundException();","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":84,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":85,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":86,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"SimWPEric"},"content":" * Marks a task at the specified index as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to mark as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"SimWPEric"},"content":" * @return The marked task.","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeNoTaskFoundException If the task is not found at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"SimWPEric"},"content":" public Task markAsUndone(int index) throws DukeNoTaskFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":95,"author":{"gitId":"SimWPEric"},"content":" Task task \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"SimWPEric"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"SimWPEric"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"SimWPEric"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":99,"author":{"gitId":"SimWPEric"},"content":" throw new DukeNoTaskFoundException();","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":101,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":102,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":103,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"SimWPEric"},"content":" * Deletes a task at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"SimWPEric"},"content":" * @param index The index of the task to delete.","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"SimWPEric"},"content":" * @return The deleted task.","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"SimWPEric"},"content":" * @throws DukeNoTaskFoundException If the task is not found at the specified index.","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"SimWPEric"},"content":" public Task delete(int index) throws DukeNoTaskFoundException {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"SimWPEric"},"content":" try {","lastModifiedDate":"2023-08-19"},{"lineNumber":113,"author":{"gitId":"SimWPEric"},"content":" Task task \u003d this.taskList.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"SimWPEric"},"content":" this.taskList.remove(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"SimWPEric"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"SimWPEric"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":117,"author":{"gitId":"SimWPEric"},"content":" throw new DukeNoTaskFoundException();","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":119,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":120,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"SimWPEric"},"content":" * Finds and returns a list of tasks that contain the specified target keyword in their descriptions.","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"SimWPEric"},"content":" * @param target The target keyword to search for in task descriptions.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"SimWPEric"},"content":" * @return An ArrayList of tasks that match the search criteria.","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":127,"author":{"gitId":"SimWPEric"},"content":" public ArrayList\u003cTask\u003e find(String target) {","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cTask\u003e filteredTask \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"SimWPEric"},"content":" for (Task task : this.taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":130,"author":{"gitId":"SimWPEric"},"content":" if (task.getDescription().contains(target)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":131,"author":{"gitId":"SimWPEric"},"content":" filteredTask.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":133,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":134,"author":{"gitId":"SimWPEric"},"content":" return filteredTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"SimWPEric"},"content":" * Retrieves the number of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"SimWPEric"},"content":" * @return The number of tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"SimWPEric"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"SimWPEric"},"content":" return this.taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":145,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":146,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":147,"author":{"gitId":"SimWPEric"},"content":" * Converts the task list to an ArrayList of string representations of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":149,"author":{"gitId":"SimWPEric"},"content":" * @return An ArrayList of strings representing the tasks in the task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":151,"author":{"gitId":"SimWPEric"},"content":" public ArrayList\u003cString\u003e stringify() {","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cString\u003e stringList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"SimWPEric"},"content":" for (Task task : this.taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"SimWPEric"},"content":" stringList.add(task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"SimWPEric"},"content":" return stringList;","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":158}},{"path":"src/main/java/duke/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":" * Represents a Todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Constructor for Todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" * @param description String describing the Todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-19"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" super(description);","lastModifiedDate":"2023-08-19"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" * Returns a string representation of the Todo.","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" * @return string representation of the Todo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" @Override","lastModifiedDate":"2023-08-19"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" String msg \u003d \"[T]\" + super.toString();","lastModifiedDate":"2023-08-19"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" return msg;","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":27}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.ui;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"import duke.task.Task;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"/**","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" * Handles user interface interactions and displays messages to the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"public class Ui {","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" * Displays a message to the user with a framed border.","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" * @param messages The messages to be displayed.","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" public String showToUser(String... messages) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" for (String message : messages) {","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" result \u003d result + message + \"\\n\";","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" return result;","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" * Displays an exit message to the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" public String showExitMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":" return showToUser(","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"SimWPEric"},"content":" \"Bye. Hope to see you again soon!\"","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":35,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"SimWPEric"},"content":" * Displays a help message to the user, listing available commands.","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"SimWPEric"},"content":" public String showHelpMessage() {","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"SimWPEric"},"content":" return showToUser(","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"SimWPEric"},"content":" \"Here are the available commands:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"SimWPEric"},"content":" \"1. bye - Exit the program\",","lastModifiedDate":"2023-08-27"},{"lineNumber":42,"author":{"gitId":"SimWPEric"},"content":" \"2. list - List all tasks\",","lastModifiedDate":"2023-08-27"},{"lineNumber":43,"author":{"gitId":"SimWPEric"},"content":" \"3. mark \u003ctaskNumber\u003e - Mark a task as done\",","lastModifiedDate":"2023-08-27"},{"lineNumber":44,"author":{"gitId":"SimWPEric"},"content":" \"4. unmark \u003ctaskNumber\u003e - Mark a task as undone\",","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"SimWPEric"},"content":" \"5. delete \u003ctaskNumber\u003e - Delete a task\",","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"SimWPEric"},"content":" \"6. todo \u003cdescription\u003e - Add a new todo task\",","lastModifiedDate":"2023-08-27"},{"lineNumber":47,"author":{"gitId":"SimWPEric"},"content":" \"7. deadline \u003cdescription\u003e /by \u003cdueDate\u003e - Add a new deadline task\",","lastModifiedDate":"2023-08-27"},{"lineNumber":48,"author":{"gitId":"SimWPEric"},"content":" \"8. event \u003cdescription\u003e /from \u003cstartDate\u003e /to \u003cendDate\u003e - Add a new event task\",","lastModifiedDate":"2023-08-27"},{"lineNumber":49,"author":{"gitId":"SimWPEric"},"content":" \"9. help - Displays the available commands\",","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"SimWPEric"},"content":" \"10. find \u003ckeyword\u003e - Search for tasks with a keyword\"","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":52,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":53,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the successful addition of a Todo task.","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"SimWPEric"},"content":" * @param task The Todo task added.","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"SimWPEric"},"content":" * @param size The updated size of the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"SimWPEric"},"content":" public String showTodoMessage(Task task, int size) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"SimWPEric"},"content":" return showToUser(","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"SimWPEric"},"content":" \"Got it. I\u0027ve added this task:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"SimWPEric"},"content":" task.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"SimWPEric"},"content":" \"Now you have \" + size + \" task\" + (size \u003c\u003d 1 ? \"\" : \"s\") + \" in the list.\"","lastModifiedDate":"2023-08-27"},{"lineNumber":65,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":68,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the successful addition of a Deadline task.","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"SimWPEric"},"content":" * @param task The Deadline task added.","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"SimWPEric"},"content":" * @param size The updated size of the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"SimWPEric"},"content":" public String showDeadlineMessage(Task task, int size) {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"SimWPEric"},"content":" return showToUser(","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"SimWPEric"},"content":" \"Got it. I\u0027ve added this deadline task:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":77,"author":{"gitId":"SimWPEric"},"content":" task.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":78,"author":{"gitId":"SimWPEric"},"content":" \"Now you have \" + size + \" task\" + (size \u003c\u003d 1 ? \"\" : \"s\") + \" in the list.\"","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":81,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":82,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the successful addition of a Event task.","lastModifiedDate":"2023-08-28"},{"lineNumber":84,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":85,"author":{"gitId":"SimWPEric"},"content":" * @param task The Event task added.","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"SimWPEric"},"content":" * @param size The updated size of the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"SimWPEric"},"content":" public String showEventMessage(Task task, int size) {","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"SimWPEric"},"content":" return showToUser(","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"SimWPEric"},"content":" \"Got it. I\u0027ve added this event task:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":91,"author":{"gitId":"SimWPEric"},"content":" task.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"SimWPEric"},"content":" \"Now you have \" + size + \" task\" + (size \u003c\u003d 1 ? \"\" : \"s\") + \" in the list.\"","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":95,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the task is marked done.","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":99,"author":{"gitId":"SimWPEric"},"content":" * @param task The task that was marked done.","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"SimWPEric"},"content":" public String showMarkMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"SimWPEric"},"content":" return showToUser(","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"SimWPEric"},"content":" \"Nice! I\u0027ve marked this task as done:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"SimWPEric"},"content":" task.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":108,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the task is marked undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"SimWPEric"},"content":" * @param task The task that was marked undone.","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":113,"author":{"gitId":"SimWPEric"},"content":" public String showUnmarkMessage(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"SimWPEric"},"content":" return showToUser(","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"SimWPEric"},"content":" \"OK, I\u0027ve marked this task as not done yet:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":116,"author":{"gitId":"SimWPEric"},"content":" task.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":117,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":118,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":119,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":121,"author":{"gitId":"SimWPEric"},"content":" * Displays a message indicating the task is deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":122,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":123,"author":{"gitId":"SimWPEric"},"content":" * @param task The task that was deleted.","lastModifiedDate":"2023-08-28"},{"lineNumber":124,"author":{"gitId":"SimWPEric"},"content":" * @param size The updated size of the TaskList.","lastModifiedDate":"2023-08-28"},{"lineNumber":125,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":126,"author":{"gitId":"SimWPEric"},"content":" public String showDeleteMessage(Task task, int size) {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"SimWPEric"},"content":" return showToUser(","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"SimWPEric"},"content":" \"Noted. I\u0027ve removed this task:\",","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"SimWPEric"},"content":" task.toString(),","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"SimWPEric"},"content":" \"Now you have \" + size + \" task\" + (size \u003c\u003d 1 ? \"\" : \"s\") + \" in the list.\"","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":135,"author":{"gitId":"SimWPEric"},"content":" * Displays a message of the taskList indexed starting from 1.","lastModifiedDate":"2023-08-28"},{"lineNumber":136,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":137,"author":{"gitId":"SimWPEric"},"content":" * @param taskList The TaskList to display.","lastModifiedDate":"2023-08-28"},{"lineNumber":138,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":139,"author":{"gitId":"SimWPEric"},"content":" public String showListMessage(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cString\u003e msg \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"SimWPEric"},"content":" int num \u003d 1;","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"SimWPEric"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"SimWPEric"},"content":" msg.add(num + \": \" + task);","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"SimWPEric"},"content":" num++;","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"SimWPEric"},"content":" if (taskList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"SimWPEric"},"content":" msg.add(\"You have no task currently.\");","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"SimWPEric"},"content":" return showToUser(","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"SimWPEric"},"content":" msg.toArray(new String[0])","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":155,"author":{"gitId":"SimWPEric"},"content":" * Displays an error message to the user.","lastModifiedDate":"2023-08-28"},{"lineNumber":156,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-08-28"},{"lineNumber":157,"author":{"gitId":"SimWPEric"},"content":" * @param e The DukeException representing the error.","lastModifiedDate":"2023-08-28"},{"lineNumber":158,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":159,"author":{"gitId":"SimWPEric"},"content":" public String showError(DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"SimWPEric"},"content":" return showToUser(","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"SimWPEric"},"content":" e.toString()","lastModifiedDate":"2023-08-27"},{"lineNumber":162,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":165,"author":{"gitId":"SimWPEric"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"SimWPEric"},"content":" * Displays a message of the filtered taskList indexed starting from 1.","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"SimWPEric"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"SimWPEric"},"content":" * @param filteredTasks The filtered TaskList to display.","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"SimWPEric"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"SimWPEric"},"content":" public String showFilteredTasks(ArrayList\u003cTask\u003e filteredTasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"SimWPEric"},"content":" ArrayList\u003cString\u003e msg \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":172,"author":{"gitId":"SimWPEric"},"content":" int num \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":173,"author":{"gitId":"SimWPEric"},"content":" for (Task task : filteredTasks) {","lastModifiedDate":"2023-08-28"},{"lineNumber":174,"author":{"gitId":"SimWPEric"},"content":" msg.add(num + \": \" + task);","lastModifiedDate":"2023-08-28"},{"lineNumber":175,"author":{"gitId":"SimWPEric"},"content":" num++;","lastModifiedDate":"2023-08-28"},{"lineNumber":176,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":177,"author":{"gitId":"SimWPEric"},"content":" if (filteredTasks.size() \u003d\u003d 0) {","lastModifiedDate":"2023-08-28"},{"lineNumber":178,"author":{"gitId":"SimWPEric"},"content":" msg.add(\"You have no matching task.\");","lastModifiedDate":"2023-08-28"},{"lineNumber":179,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":180,"author":{"gitId":"SimWPEric"},"content":" return showToUser(","lastModifiedDate":"2023-09-04"},{"lineNumber":181,"author":{"gitId":"SimWPEric"},"content":" msg.toArray(new String[0])","lastModifiedDate":"2023-08-28"},{"lineNumber":182,"author":{"gitId":"SimWPEric"},"content":" );","lastModifiedDate":"2023-08-28"},{"lineNumber":183,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":184,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":184}},{"path":"src/main/resources/view/DialogBox.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"\u003c?import javafx.scene.image.ImageView?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"\u003c?import javafx.scene.shape.Circle?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"\u003c?import java.net.URL?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"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":11,"author":{"gitId":"SimWPEric"},"content":" \u003cstylesheets\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" \u003cURL value\u003d\"@../stylesheets/DialogBox.css\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" \u003c/stylesheets\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" \u003cLabel fx:id\u003d\"dialog\" text\u003d\"Label\" wrapText\u003d\"true\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" \u003cImageView fx:id\u003d\"displayPicture\" fitHeight\u003d\"50.0\" fitWidth\u003d\"50.0\" pickOnBounds\u003d\"true\" preserveRatio\u003d\"true\" \u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" \u003cclip\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" \u003cCircle radius\u003d\"25.0\" centerX\u003d\"25.0\" centerY\u003d\"25.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" \u003c/clip\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" \u003c/ImageView\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"5.0\" right\u003d\"5.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"SimWPEric":25}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"fxml","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"\u003c?import javafx.scene.layout.AnchorPane?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"\u003c?import java.net.URL?\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"\u003cAnchorPane prefHeight\u003d\"600.0\" prefWidth\u003d\"400.0\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:controller\u003d\"duke.MainWindow\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" \u003cstylesheets\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" \u003cURL value\u003d\"@../stylesheets/MainWindow.css\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" \u003c/stylesheets\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" \u003cTextField fx:id\u003d\"userInput\" layoutY\u003d\"558.0\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"324.0\" AnchorPane.bottomAnchor\u003d\"1.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" \u003cButton fx:id\u003d\"sendButton\" layoutX\u003d\"324.0\" layoutY\u003d\"558.0\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleUserInput\" prefHeight\u003d\"41.0\" prefWidth\u003d\"76.0\" text\u003d\"Send\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" hbarPolicy\u003d\"NEVER\" hvalue\u003d\"1.0\" prefHeight\u003d\"557.0\" prefWidth\u003d\"400.0\" vvalue\u003d\"1.0\"\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" minHeight\u003d\"552.0\" minWidth\u003d\"382.0\" maxWidth\u003d\"382.0\" /\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"SimWPEric":23}},{"path":"src/test/java/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" public void addDeadline_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" Deadline task \u003d new Deadline(\"CS2103T ip\", LocalDate.parse(\"2023-08-12\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[D][ ] CS2103T ip (by: Aug 12 2023)\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" public void markDeadline_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" Deadline task \u003d new Deadline(\"CS2103T ip\", LocalDate.parse(\"2023-08-12\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[D][X] CS2103T ip (by: Aug 12 2023)\");","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" public void unmarkDeadline_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" Deadline task \u003d new Deadline(\"CS2103T ip\", LocalDate.parse(\"2023-08-12\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[D][ ] CS2103T ip (by: Aug 12 2023)\");","lastModifiedDate":"2023-08-27"},{"lineNumber":29,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":30,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":30}},{"path":"src/test/java/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"public class EventTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" public void addEvent_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" Event task \u003d new Event(\"career fair\", LocalDate.parse(\"2023-08-10\"), LocalDate.parse(\"2023-08-11\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[E][ ] career fair (from: Aug 10 2023 to: Aug 11 2023)\");","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":15}},{"path":"src/test/java/duke/task/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"package duke.task;","lastModifiedDate":"2023-08-27"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"public class TodoTest {","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":" public void addTodo_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":" Todo task \u003d new Todo(\"CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[T][ ] CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":" public void markTodo_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":" Todo task \u003d new Todo(\"CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[T][X] CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"SimWPEric"},"content":" @Test","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"SimWPEric"},"content":" public void unmarkTodo_success() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SimWPEric"},"content":" Todo task \u003d new Todo(\"CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"SimWPEric"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"SimWPEric"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"SimWPEric"},"content":" assertEquals(task.toString(), \"[T][ ] CS2103T ip\");","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"SimWPEric"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":28,"author":{"gitId":"SimWPEric"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"SimWPEric":28}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"SimWPEric"},"content":"todo borrow book","lastModifiedDate":"2023-08-19"},{"lineNumber":2,"author":{"gitId":"SimWPEric"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-19"},{"lineNumber":3,"author":{"gitId":"SimWPEric"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"author":{"gitId":"SimWPEric"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"SimWPEric"},"content":"mark 1","lastModifiedDate":"2023-08-19"},{"lineNumber":6,"author":{"gitId":"SimWPEric"},"content":"mark","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"SimWPEric"},"content":"mark 4","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"SimWPEric"},"content":"mark a","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"SimWPEric"},"content":"unmark","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"SimWPEric"},"content":"unmark 4","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"SimWPEric"},"content":"unmark a","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"SimWPEric"},"content":"delete","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"SimWPEric"},"content":"delete 4","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"SimWPEric"},"content":"delete a","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"SimWPEric"},"content":"delete 1","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"SimWPEric"},"content":"list","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"SimWPEric"},"content":"todo","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"SimWPEric"},"content":"deadline","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"SimWPEric"},"content":"event","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"SimWPEric"},"content":"bye","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"SimWPEric":20}}] diff --git a/SimWPEric_ip_master/commits.json b/SimWPEric_ip_master/commits.json index 42350338..cfbc63d6 100644 --- a/SimWPEric_ip_master/commits.json +++ b/SimWPEric_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"SimWPEric":[{"date":"2023-08-18","commitResults":[{"hash":"9a26ad84aa87e552e490ff190e33e20312b71414","isMergeCommit":false,"messageTitle":"Added greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":6}}},{"hash":"964e3410712b70b00ee05c0d31f460844db403cf","isMergeCommit":false,"messageTitle":"Added echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}}]},{"date":"2023-08-19","commitResults":[{"hash":"4ba5c8a874bb3f8fdf60c649048694bbbf47b293","isMergeCommit":false,"messageTitle":"Added add, list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":3}}},{"hash":"64a2c8799d8caf8d37c1fa10dbc22b5f42c3fdad","isMergeCommit":false,"messageTitle":"Added mark as done, mark as not done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"40e9d1510005ffa08d66222becd7899c5723c630","isMergeCommit":false,"messageTitle":"Added ToDos, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":6}}},{"hash":"ae2ff5403eab5c8cf68ec32af9bbd510f3f80522","isMergeCommit":false,"messageTitle":"Added Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":18,"deletions":19}}},{"hash":"0960f76eaa4ccafe2447179b2ecd7aab38730615","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":38}}},{"hash":"ef3dc5ed3bce93fe9de86d753bc08cf93966c560","isMergeCommit":false,"messageTitle":"Added delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":20}}},{"hash":"6cb266c2f3728e9de335b29856b99fa20b6853f3","isMergeCommit":false,"messageTitle":"Added enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":25}}}]},{"date":"2023-08-26","commitResults":[{"hash":"4595cf0c8410dfb6bfa3ac696f5dae3c3fbaa495","isMergeCommit":false,"messageTitle":"Fix indentation","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":15,"deletions":2},"java":{"insertions":5,"deletions":5}}},{"hash":"59fbb699746dddf39884685dc8da51388f5e17ef","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":5}}},{"hash":"1504c2b305f52fc00a57eaa965b7c50817047eed","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"* branch-Level-7:\n Add save feature\n","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"16912f694a93a2650f7269f4a3373fe57c71feac","isMergeCommit":false,"messageTitle":"Replace String-Based Date with LocalDate Objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":16}}},{"hash":"66ff94a5bb465d9f37f118acf33892b03563a433","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Replace String-Based Date with LocalDate Objects\n","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"aaad53fe495f315b138d20d8e7648a9b35639d5e","isMergeCommit":false,"messageTitle":"Add Parser class to handle user command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":78}}},{"hash":"6fc2c4cc847f2492159f73938a514a2f9bf0a3ce","isMergeCommit":false,"messageTitle":"Add constructor to Duke class","messageBody":"This commit introduces a constructor to the Duke class that takes a `filePath` parameter.\n","fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":54}}},{"hash":"c73cb228123348f1fead163c1b89e82d4158d691","isMergeCommit":false,"messageTitle":"Add Ui class to handle interactions with user","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":144,"deletions":71}}},{"hash":"78c8fbb4ad6dfc67d18a7662baa15a4eaddab6ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"* A-MoreOOP:\n Add Ui class to handle interactions with user\n Add constructor to Duke class\n Add Parser class to handle user command\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"77a069882aff76ffdf661c98d7ce22e42d0de88f","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0},"md":{"insertions":2,"deletions":2}}},{"hash":"a8bbd70414522b7406bd1ec1def298ec6e4a92fd","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"* A-Packages:\n Divide classes into packages\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"6d70aeef19bab78f8cda9f4131020e37c7f4b27a","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 into A-Gradle","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"845187864969ae159a90a3ceaf314e8e04f97a25","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"4010cd430f58c308ea0bc4aaa96dd055ca4a7cec","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"* A-Gradle:\n Add gradle support\n Bump gradle and lib version\n Add Gradle support\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"83d0cef22bb42030ada69ae6cb335f6979dfaab5","isMergeCommit":false,"messageTitle":"Add JUnit tests for Todo, Deadline and Event task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":0}}},{"hash":"eed5f083cc863da7ff14b112bab84e159a494d78","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"* A-JUnit:\n Add JUnit tests for Todo, Deadline and Event task\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"bdc49474a9480121be2646549df2eed9508dba7e","isMergeCommit":false,"messageTitle":"Add find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":12}}},{"hash":"dc9a271db6b7789cb96c1ea167747277d669871a","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"Add header comments to all non-private classes/methods, and non-trivial private methods.\n","fileTypesAndContributionMap":{"java":{"insertions":200,"deletions":4}}},{"hash":"08c0993200685631280cd31359e30d049c0ac9e0","isMergeCommit":false,"messageTitle":"Fix coding standard violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":8}}},{"hash":"22836f327d60e62cdf2178f121883f547e0f9645","isMergeCommit":false,"messageTitle":"Add JavaDoc for Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":2}}},{"hash":"13fcdb599c63838f55935679be3dffe111c05238","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Add find feature\n","fileTypesAndContributionMap":{}},{"hash":"a5605d704bb6bc9425ef3d4e987a156ad23cc248","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"* branch-A-JavaDoc:\n Add JavaDoc for Ui class\n Add JavaDoc comments\n\n# Conflicts:\n#\tsrc/main/java/duke/Command.java\n#\tsrc/main/java/duke/parser/Parser.java\n#\tsrc/main/java/duke/task/Task.java\n#\tsrc/main/java/duke/task/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"2745850e50694050be80e6d03c939c5b425c6c51","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n Fix coding standard violations\n","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"bf074369619fc7d5f0164a8a5f9e9fce8f3c2676","isMergeCommit":false,"messageTitle":"Extract Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":545,"deletions":355}}},{"hash":"4c3f2c6ef958a7002d9fc84933aab779ca248418","isMergeCommit":false,"messageTitle":"Add checkstyle configs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":83,"deletions":69}}},{"hash":"ad0a304e917122766c9b5b3cb6cd31567cff9f0a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"* branch-A-CheckStyle:\n Add checkstyle configs\n","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SimWPEric":{"java":1405,"md":2,"fxml":0,"sh":0,"bat":0,"gradle":6,"txt":20}},"authorContributionVariance":{"SimWPEric":100606.29},"authorDisplayNameMap":{"SimWPEric":"CS2103T-W13-4 SIM ..ERIC"}} +{"authorDailyContributionsMap":{"SimWPEric":[{"date":"2023-08-18","commitResults":[{"hash":"9a26ad84aa87e552e490ff190e33e20312b71414","isMergeCommit":false,"messageTitle":"Added greet, exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":6}}},{"hash":"964e3410712b70b00ee05c0d31f460844db403cf","isMergeCommit":false,"messageTitle":"Added echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":4}}}]},{"date":"2023-08-19","commitResults":[{"hash":"4ba5c8a874bb3f8fdf60c649048694bbbf47b293","isMergeCommit":false,"messageTitle":"Added add, list","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":3}}},{"hash":"64a2c8799d8caf8d37c1fa10dbc22b5f42c3fdad","isMergeCommit":false,"messageTitle":"Added mark as done, mark as not done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"40e9d1510005ffa08d66222becd7899c5723c630","isMergeCommit":false,"messageTitle":"Added ToDos, Event, Deadline","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":72,"deletions":6}}},{"hash":"ae2ff5403eab5c8cf68ec32af9bbd510f3f80522","isMergeCommit":false,"messageTitle":"Added Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":18,"deletions":19}}},{"hash":"0960f76eaa4ccafe2447179b2ecd7aab38730615","isMergeCommit":false,"messageTitle":"Added error handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":118,"deletions":38}}},{"hash":"ef3dc5ed3bce93fe9de86d753bc08cf93966c560","isMergeCommit":false,"messageTitle":"Added delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":20}}},{"hash":"6cb266c2f3728e9de335b29856b99fa20b6853f3","isMergeCommit":false,"messageTitle":"Added enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":43,"deletions":25}}}]},{"date":"2023-08-26","commitResults":[{"hash":"4595cf0c8410dfb6bfa3ac696f5dae3c3fbaa495","isMergeCommit":false,"messageTitle":"Fix indentation","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":15,"deletions":2},"java":{"insertions":5,"deletions":5}}},{"hash":"59fbb699746dddf39884685dc8da51388f5e17ef","isMergeCommit":false,"messageTitle":"Add save feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":5}}},{"hash":"1504c2b305f52fc00a57eaa965b7c50817047eed","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"* branch-Level-7:\n Add save feature\n","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"16912f694a93a2650f7269f4a3373fe57c71feac","isMergeCommit":false,"messageTitle":"Replace String-Based Date with LocalDate Objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":16}}},{"hash":"66ff94a5bb465d9f37f118acf33892b03563a433","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Replace String-Based Date with LocalDate Objects\n","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"aaad53fe495f315b138d20d8e7648a9b35639d5e","isMergeCommit":false,"messageTitle":"Add Parser class to handle user command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":143,"deletions":78}}},{"hash":"6fc2c4cc847f2492159f73938a514a2f9bf0a3ce","isMergeCommit":false,"messageTitle":"Add constructor to Duke class","messageBody":"This commit introduces a constructor to the Duke class that takes a `filePath` parameter.\n","fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":54}}},{"hash":"c73cb228123348f1fead163c1b89e82d4158d691","isMergeCommit":false,"messageTitle":"Add Ui class to handle interactions with user","messageBody":"","tags":["A-Varargs"],"fileTypesAndContributionMap":{"java":{"insertions":144,"deletions":71}}},{"hash":"78c8fbb4ad6dfc67d18a7662baa15a4eaddab6ea","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"* A-MoreOOP:\n Add Ui class to handle interactions with user\n Add constructor to Duke class\n Add Parser class to handle user command\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"77a069882aff76ffdf661c98d7ce22e42d0de88f","isMergeCommit":false,"messageTitle":"Divide classes into packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":0},"md":{"insertions":2,"deletions":2}}},{"hash":"a8bbd70414522b7406bd1ec1def298ec6e4a92fd","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"* A-Packages:\n Divide classes into packages\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"6d70aeef19bab78f8cda9f4131020e37c7f4b27a","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027 into A-Gradle","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"845187864969ae159a90a3ceaf314e8e04f97a25","isMergeCommit":false,"messageTitle":"Add gradle support","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"4010cd430f58c308ea0bc4aaa96dd055ca4a7cec","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"* A-Gradle:\n Add gradle support\n Bump gradle and lib version\n Add Gradle support\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"83d0cef22bb42030ada69ae6cb335f6979dfaab5","isMergeCommit":false,"messageTitle":"Add JUnit tests for Todo, Deadline and Event task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":0}}},{"hash":"eed5f083cc863da7ff14b112bab84e159a494d78","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"* A-JUnit:\n Add JUnit tests for Todo, Deadline and Event task\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-28","commitResults":[{"hash":"bdc49474a9480121be2646549df2eed9508dba7e","isMergeCommit":false,"messageTitle":"Add find feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":12}}},{"hash":"dc9a271db6b7789cb96c1ea167747277d669871a","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"Add header comments to all non-private classes/methods, and non-trivial private methods.\n","fileTypesAndContributionMap":{"java":{"insertions":200,"deletions":4}}},{"hash":"08c0993200685631280cd31359e30d049c0ac9e0","isMergeCommit":false,"messageTitle":"Fix coding standard violations","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":8}}},{"hash":"22836f327d60e62cdf2178f121883f547e0f9645","isMergeCommit":false,"messageTitle":"Add JavaDoc for Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":2}}},{"hash":"13fcdb599c63838f55935679be3dffe111c05238","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Add find feature\n","fileTypesAndContributionMap":{}},{"hash":"a5605d704bb6bc9425ef3d4e987a156ad23cc248","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"* branch-A-JavaDoc:\n Add JavaDoc for Ui class\n Add JavaDoc comments\n\n# Conflicts:\n#\tsrc/main/java/duke/Command.java\n#\tsrc/main/java/duke/parser/Parser.java\n#\tsrc/main/java/duke/task/Task.java\n#\tsrc/main/java/duke/task/TaskList.java\n","fileTypesAndContributionMap":{}},{"hash":"2745850e50694050be80e6d03c939c5b425c6c51","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n Fix coding standard violations\n","tags":["Level-9","A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"bf074369619fc7d5f0164a8a5f9e9fce8f3c2676","isMergeCommit":false,"messageTitle":"Extract Command classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":545,"deletions":355}}},{"hash":"4c3f2c6ef958a7002d9fc84933aab779ca248418","isMergeCommit":false,"messageTitle":"Add checkstyle configs","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"java":{"insertions":83,"deletions":69}}},{"hash":"ad0a304e917122766c9b5b3cb6cd31567cff9f0a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CheckStyle\u0027","messageBody":"* branch-A-CheckStyle:\n Add checkstyle configs\n","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"3e42c5a018a9ded335bbc59449d55fa1e4fb3933","isMergeCommit":false,"messageTitle":"Add simple GUI","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":16,"deletions":1},"fxml":{"insertions":48,"deletions":0},"java":{"insertions":245,"deletions":97}}},{"hash":"757d4242471b29df26b3c4a040678a3cc231853a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-10\u0027","messageBody":"* branch-Level-10:\n Add simple GUI\n","tags":["Level-10"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SimWPEric":{"java":1555,"md":2,"fxml":48,"sh":0,"bat":0,"gradle":21,"txt":20}},"authorContributionVariance":{"SimWPEric":94049.41},"authorDisplayNameMap":{"SimWPEric":"CS2103T-W13-4 SIM ..ERIC"}} diff --git a/SynapseProgramming_ip_master/commits.json b/SynapseProgramming_ip_master/commits.json index 9e75cfca..8ce2da6c 100644 --- a/SynapseProgramming_ip_master/commits.json +++ b/SynapseProgramming_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"SynapseProgramming":[{"date":"2023-08-21","commitResults":[{"hash":"734a66800a1df6236875b7d340187a4d5e918bfe","isMergeCommit":false,"messageTitle":"Added in initial greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"906971659ddfe81607794f4e89bd46692972f870","isMergeCommit":false,"messageTitle":"Added in echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"e5e7fb40ea3aeb4902e5d65d2aad7d7b058d7e88","isMergeCommit":false,"messageTitle":"Completed level-2 feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"e9d07fa464a9267f944bb1254313e40713c7cad8","isMergeCommit":false,"messageTitle":"Added in mark command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"65fd77b4402c45ec1529d4b55ef40bd9e999c1c5","isMergeCommit":false,"messageTitle":"Modified input string parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"9d65caaa1d0ab01b17b1b023e7d60477dd74c249","isMergeCommit":false,"messageTitle":"Added in Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"91ac6f7cac3abec473eecb9f8c38d15212f305c1","isMergeCommit":false,"messageTitle":"Renamed userInputs array as taskList. Added in task marking","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"9cd8e335d38bf156320db24a0f7e23bfb7398f35","isMergeCommit":false,"messageTitle":"Added in unmark function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"e351321deeb8f26d7602e6fc3020bbdf207ff41f","isMergeCommit":false,"messageTitle":"Converted if-else chain to switch statement","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":30}}},{"hash":"620b1af2da7c57936d317d3a5d3f0318e0631722","isMergeCommit":false,"messageTitle":"Added in todo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"83be3198a5ffd93689fa4eb487c57265548744f2","isMergeCommit":false,"messageTitle":"Added in Todo class to represent Todo event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"92dec94f9625383f281bbb87a6c4522ba8b9b34f","isMergeCommit":false,"messageTitle":"Added in UiFormatter class for formatting objects of type Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"1ddf9793afc436d1e886522bae0ac4095eb9cb7d","isMergeCommit":false,"messageTitle":"completed \"todo\" command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"8ab10ba94c203b040a848338a9cb5c97e2c25a62","isMergeCommit":false,"messageTitle":"removed default add task, and changed print statements to use UiFormatter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":8}}},{"hash":"aa02ffab6a8fc825b0fe43957b88d18a9e27f79f","isMergeCommit":false,"messageTitle":"Added in Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"5fd772a81b82f76f518667a986b44cc116ed49da","isMergeCommit":false,"messageTitle":"Added in formatting for Deadline objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"b293421d5f689a97effefd3e5193e4f0fa0106b6","isMergeCommit":false,"messageTitle":"Added in deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9f639de3829c1e5d8daa94b76289f53fd8bb8827","isMergeCommit":false,"messageTitle":"Added in Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"16cb6b6ff32d7ee3a8fb214014345da0b3ac0f42","isMergeCommit":false,"messageTitle":"Added in Event class to displayTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"b4af2cfbc1a3798dc7b61b99305ba167214ffff2","isMergeCommit":false,"messageTitle":"Added in Event command","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"f7fc11bccf2470470153ead65edf3e1bb13ffabf","isMergeCommit":false,"messageTitle":"Added in input testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"3dfb3a8d2af0b759fd94f36cd45c3a6f542fe518","isMergeCommit":false,"messageTitle":"Added in exception handling for mark and unmark commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":15}}},{"hash":"b7384cda1177eb094be86459b0dafe6c8dd29a64","isMergeCommit":false,"messageTitle":"Added in exception handling for end of line","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"83f297976e48dc683d69a7eb4316b1d58866e41e","isMergeCommit":false,"messageTitle":"Added in empty list check for list command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"510c9eb7cc9b6597ecfde7ee57cd757b2ac5521a","isMergeCommit":false,"messageTitle":"Added in exception handling for todo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"4ffd55777519714e535bf0dbc71fbc2edbda4a52","isMergeCommit":false,"messageTitle":"Added in exception handling for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"4f50adf72971fe54e1d8bc70e552839dd0bbcbdd","isMergeCommit":false,"messageTitle":"Added in exception handling for event command","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":13}}}]},{"date":"2023-08-24","commitResults":[{"hash":"1036360dc848b827a9715eb065dd553142e91bd3","isMergeCommit":false,"messageTitle":"Added in case for deleting entries from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"752aa3b6d4346be95f552c85d0f819f2e197a538","isMergeCommit":true,"messageTitle":"Merge pull request #1 from SynapseProgramming/devel","messageBody":"Completed week 2 tasks","fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"2d7c02079abf478b3a10917dfb40497639bbcdfc","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Level-7","messageBody":"* add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"1266a00de68a2ebbf6eed26d0c113898ffc185a0","isMergeCommit":false,"messageTitle":"Add json library as a dependency","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"0fff40c39e33eda6cb5128e0fbaeca0bb7ac383c","isMergeCommit":false,"messageTitle":"Add in Tasklistloader class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}},{"hash":"70d745c2f027557ec2b2be6c48e7489a76e5e04f","isMergeCommit":false,"messageTitle":"Add in test json file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"c6fc339d09b52a1d052298b0661cac1287a9b470","isMergeCommit":false,"messageTitle":"Enable polymorphism for json Task parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f377b3ee66bf57e0d94469c0635e8431f37d4f0d","isMergeCommit":false,"messageTitle":"Modify description field of Task class to private","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"2eb3e1fc0a4795485cb56b7ae643a4dd7b7d21d2","isMergeCommit":false,"messageTitle":"Fix missing fields in json file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"b398d003fe7df0da2741936c0457209da5a806ef","isMergeCommit":false,"messageTitle":"Modify access of description class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"b20bd5f86f411316f1ad75b80fa165a683db7249","isMergeCommit":false,"messageTitle":"Add in first working json serializing/ deserializing attempt","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":6}}}]},{"date":"2023-08-29","commitResults":[{"hash":"e08b009480795a21fe0823f50d2d829cae7799d1","isMergeCommit":false,"messageTitle":"Remove commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"2a1935e939be676b75fc53ce23cfa9df0738f3ab","isMergeCommit":false,"messageTitle":"Code linting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"92394c7d2fced822bd88623fd5207ab11945ef07","isMergeCommit":false,"messageTitle":"Add in empty constructor required by Jackson library","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"69676dee55f0afd869e5f3f2aedbbfd505f9497d","isMergeCommit":false,"messageTitle":"Remove unused headers and comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"d95bb5c643b50464caa5007ea04d5740e4fa3299","isMergeCommit":false,"messageTitle":"Fix class field visibility for Jackon. \u0026 Save previous data to arraylist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"f3a868d0274eb1decbfae1f6fa5bb35112e0369b","isMergeCommit":false,"messageTitle":"change done to boolean object type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"324ebe865d995928cf332233a26a509abd06aa4d","isMergeCommit":false,"messageTitle":"Remove print test statements and commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":8}}},{"hash":"4a80709181364571e0168a46829b97533a129229","isMergeCommit":false,"messageTitle":"Place save tasks function to end of main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"3698ca926892b8285891af0b7e0dc828aeaf320f","isMergeCommit":false,"messageTitle":"Add in more verbose warning for ( tasks.json not found)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ba398b9a123f7884d851e863d362c81eb4713df4","isMergeCommit":true,"messageTitle":"Merge pull request #2 from SynapseProgramming/branch-Level-7","messageBody":"Add task save to json file","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"3ba4a4eab3258662c2252648cecc66bd0dce231e","isMergeCommit":false,"messageTitle":"Add DeadTime support for parser","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":2,"deletions":0}}},{"hash":"b897a1d62d667622cb8b1d25d2f1aa59dde31d5b","isMergeCommit":false,"messageTitle":"Change date field to LocalDate type for Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"3e9087a23fbcd5d43065d4fffda87f9eec0c5534","isMergeCommit":false,"messageTitle":"Add in string formatting to Localdate type for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"9f48ef4302046558dbbcc9158205b9df671b12e5","isMergeCommit":false,"messageTitle":"Remove toto and test print statements","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":3}}}]},{"date":"2023-08-30","commitResults":[{"hash":"6b5795d7bec7377c450d7fe598e725cad8f81365","isMergeCommit":true,"messageTitle":"Merge pull request #3 from SynapseProgramming/branch-Level-8","messageBody":"Change deaddate field from string type to Date type","fileTypesAndContributionMap":{}},{"hash":"9b52c284edf6ef1cd0d20f61ce765ecfbcea8676","isMergeCommit":false,"messageTitle":"Rename ReceivedTasks to TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"2f6b44637381a727654f17c896dde388c8a524a3","isMergeCommit":false,"messageTitle":"Rename Tasklistloader to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"da38f669d42ab65d7285369fa46c06d15689776e","isMergeCommit":false,"messageTitle":"Add in initial parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":3}}},{"hash":"dd800a99683fe8befd595700ff1519f066c29212","isMergeCommit":false,"messageTitle":"Remove commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"a18874ba037f99f786701e76b5986c65ddfc7b63","isMergeCommit":false,"messageTitle":"Add in getIndex function into parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"464bef9d7c370ad376e29c090f339ed8aa22029d","isMergeCommit":false,"messageTitle":"Add in getIndex function call for unmark command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"4046fa9ff61272777cee50af8afd21ff1aa8526b","isMergeCommit":false,"messageTitle":"Add in getCommandString function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":3}}},{"hash":"35180aace669e8020de7bbb32d9ad7c3c968faab","isMergeCommit":false,"messageTitle":"Added in getTaskName function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":3}}},{"hash":"7188f53999b3ffefcd0c0386162e77fc1d22cde1","isMergeCommit":false,"messageTitle":"Add getTask name for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"5bcff6a3541b6f6d87e49873cd8ddaa7a0aca353","isMergeCommit":false,"messageTitle":"Add in getIndex for remove command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"4a128f3d79cc66ec46603cd56813f0d89be72932","isMergeCommit":false,"messageTitle":"Rename class UiFormatter to Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"01be0b0055ba8d9056023e0c9e38d972116f2f22","isMergeCommit":false,"messageTitle":"Remove unused variables","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"1d6e13df250200e2ddf55aa9f338bceac51ce774","isMergeCommit":false,"messageTitle":"Remove unused variables and added in isInputThere function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}}]},{"date":"2023-08-31","commitResults":[{"hash":"30bd3d7a44eff74e25409f5a25ae3841ff59f3c5","isMergeCommit":false,"messageTitle":"Change TaskList to be the main array for storing tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}},{"hash":"71e2efa0d6657523bd080cd4abb3c1aee80cc19f","isMergeCommit":false,"messageTitle":"Change Storage class to handle tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"aa108eda1e195da71c572621dc86266918b6b104","isMergeCommit":false,"messageTitle":"Change taskList to be of type TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"3a9c099fd39053832ada868e4223c4c98dcf3736","isMergeCommit":false,"messageTitle":"Code refactor for main function","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":7}}},{"hash":"fa1ab0e59cb651b46cea113dfaad4b8d62aa59ec","isMergeCommit":true,"messageTitle":"Merge pull request #4 from SynapseProgramming/devel","messageBody":"Completed more OOP part. ","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"f6705ed98b28f1a46f9dad4dfa6998e2a049f905","isMergeCommit":false,"messageTitle":"Move all task related classes to tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":14}}},{"hash":"2309f470fabae1595144ec85eca5afb9e33c9cda","isMergeCommit":false,"messageTitle":"change import to get task related stuff from task package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"ad2fe54155287debe70696bff272777fe3fc7f3b","isMergeCommit":false,"messageTitle":"Move storage class to storage package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"a07be856e12d4c437fb07c44e0858f0d8be80ade","isMergeCommit":false,"messageTitle":"Move parser and ui class to io folder","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"a4e7879c6857e98a46cc5f2728b39a34cd7d66a1","isMergeCommit":false,"messageTitle":"update main duke class to import classes from the new packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"c12182c7ba714c38c984bab411aeef083e1093bd","isMergeCommit":true,"messageTitle":"Merge pull request #5 from SynapseProgramming/devel","messageBody":"Organised code into packages","fileTypesAndContributionMap":{}},{"hash":"8320b341347136090649c49b0a88b298b9254848","isMergeCommit":false,"messageTitle":"add in parseDeadline function, which handles parsing for deadline command.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"345646bf4b6eff362895be5a7a7bc562782f9535","isMergeCommit":false,"messageTitle":"Add in custom exception for Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"2fb7cecc46cf5b931e1d36a1df96e5e0859f8880","isMergeCommit":false,"messageTitle":"Integrate parser exception for parseDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":23}}},{"hash":"89d4f03a182a763c2ec530118691af30d91d66b7","isMergeCommit":false,"messageTitle":"Add in parseEvent function and modified duke run function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":16}}},{"hash":"91413a691b7b0624e76b68545338011226ef2bb4","isMergeCommit":false,"messageTitle":"Remove unused headers","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":5}}},{"hash":"467b51b3e234158d71d374ef83e6619945377c6d","isMergeCommit":false,"messageTitle":"Add in display greetings function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"9c5bec3db52e0ed11fd5c7848c63c5b13a388b85","isMergeCommit":false,"messageTitle":"Add in display action function to ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"d7b2d951c06f4f69f673e489e967d2dd1a478cb2","isMergeCommit":false,"messageTitle":"Change print + action statements to use displayAction function.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"670c19e4d82476a4c820f8fc404725b5d5afa023","isMergeCommit":false,"messageTitle":"Add in displayGoodbye function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"0b39d9f2a086d95d4a1cbc7cb53729464aa3c40c","isMergeCommit":false,"messageTitle":"Add listTasks function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":14}}},{"hash":"498cd6094626414d8c859d6c9beab03286a89153","isMergeCommit":false,"messageTitle":"Add markTaskAsDone function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":9}}},{"hash":"f3cd9c5aad1815d7ab8b3df43a0846b35b62e562","isMergeCommit":false,"messageTitle":"Add unmarkTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":11}}},{"hash":"58fb305dc4e76b9bf28dbf12b1a1a40d5c18cb13","isMergeCommit":false,"messageTitle":"Add in addTodo function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":9}}},{"hash":"889a7fba03e370471325bfd55b9b06df25cc0279","isMergeCommit":false,"messageTitle":"Add in addDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":9}}},{"hash":"d1b027f36f7aae60ab81929a53622e75c2d1bb2e","isMergeCommit":false,"messageTitle":"Add in addEvent function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":7}}},{"hash":"2bca407321382cb38efc66688d9840d0243a7a91","isMergeCommit":false,"messageTitle":"Add in deleteTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":14}}},{"hash":"431cdc261810c43551c6c0241aa43f3b6047bc81","isMergeCommit":true,"messageTitle":"Merge pull request #6 from SynapseProgramming/devel","messageBody":"Code Refactoring and custom exceptions","fileTypesAndContributionMap":{}},{"hash":"470a2dd4ff32d59b48f72826d6d2be87597b0707","isMergeCommit":false,"messageTitle":"Add in J-unit test case for parseEvent function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"8c7ade6fce485cea34abb51ac261d8f0748e3d48","isMergeCommit":false,"messageTitle":"Add in additional tests for parseDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":2}}},{"hash":"cdc1181daac42f76d05adb37913359f658f643a0","isMergeCommit":false,"messageTitle":"Add in UiTest test file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"094a8fb32b8b68a1cbb2ea0ed62bdde94a3ea48b","isMergeCommit":false,"messageTitle":"Add in additional tests for displayTask function","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"6db809212d4e3d7c9510c8ba4b9966ce3c4e19a1","isMergeCommit":true,"messageTitle":"Merge pull request #7 from SynapseProgramming/devel","messageBody":"Add in J-unit tests","fileTypesAndContributionMap":{}},{"hash":"0e76be6de3f3e7cc8c0e27947198acaf9a00c4fc","isMergeCommit":false,"messageTitle":"Move Duke class to another packaged called duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"a1546c259dec2247fbb19781580682b632a83d87","isMergeCommit":false,"messageTitle":"Add in jar file creation","messageBody":"","tags":["V0.1","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"b3667c434572b1505a5c791aee9c4f5c5e94f549","isMergeCommit":true,"messageTitle":"Merge pull request #8 from SynapseProgramming/devel","messageBody":"Add in .jar file compilation settings, and moved duke class to its own package","fileTypesAndContributionMap":{}},{"hash":"f800e19738335518ab62598feb4383c8dae10125","isMergeCommit":false,"messageTitle":"Add in javadoc comments for all parser functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":1}}},{"hash":"3c84e35d89595858583b694ae7d0156f281a80e9","isMergeCommit":false,"messageTitle":"Add in javadoc comments for Storage functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"6000e3fc636060df4c49fdc025a08d3c125a7325","isMergeCommit":false,"messageTitle":"Add in javadoc comments for Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"f30cb0220ae1c9b5ac1accf629c3c9fcb9bedb90","isMergeCommit":false,"messageTitle":"Add in javadoc comments for all classes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":0}}},{"hash":"2e2f565104d7cf8f4f07d2d57cfc9bf4f6dd7c70","isMergeCommit":false,"messageTitle":"Apply updated code linting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":374,"deletions":371}}},{"hash":"ffabe4470ce120bf6b3fc3bd9995e82357d9ffa5","isMergeCommit":false,"messageTitle":"Add in find function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":160}}},{"hash":"ffb61d42e32055141b89623e6df675bb1cfd10a0","isMergeCommit":true,"messageTitle":"Merge level-9 branch with main","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6d0fe108c0ad0977faa410fe14f6fcae8cae16a8","isMergeCommit":true,"messageTitle":"Merge javadoc branch with main","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SynapseProgramming":{"java":876,"md":2,"fxml":0,"sh":1,"bat":1,"gradle":5,"txt":9}},"authorContributionVariance":{"SynapseProgramming":97935.695},"authorDisplayNameMap":{"SynapseProgramming":"CS2103T-W10-3 ONG ..OALD"}} +{"authorDailyContributionsMap":{"SynapseProgramming":[{"date":"2023-08-21","commitResults":[{"hash":"734a66800a1df6236875b7d340187a4d5e918bfe","isMergeCommit":false,"messageTitle":"Added in initial greetings","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":8}}},{"hash":"906971659ddfe81607794f4e89bd46692972f870","isMergeCommit":false,"messageTitle":"Added in echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"e5e7fb40ea3aeb4902e5d65d2aad7d7b058d7e88","isMergeCommit":false,"messageTitle":"Completed level-2 feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":1}}}]},{"date":"2023-08-22","commitResults":[{"hash":"e9d07fa464a9267f944bb1254313e40713c7cad8","isMergeCommit":false,"messageTitle":"Added in mark command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"65fd77b4402c45ec1529d4b55ef40bd9e999c1c5","isMergeCommit":false,"messageTitle":"Modified input string parsing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"9d65caaa1d0ab01b17b1b023e7d60477dd74c249","isMergeCommit":false,"messageTitle":"Added in Task class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":0}}},{"hash":"91ac6f7cac3abec473eecb9f8c38d15212f305c1","isMergeCommit":false,"messageTitle":"Renamed userInputs array as taskList. Added in task marking","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":5}}},{"hash":"9cd8e335d38bf156320db24a0f7e23bfb7398f35","isMergeCommit":false,"messageTitle":"Added in unmark function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":0}}},{"hash":"e351321deeb8f26d7602e6fc3020bbdf207ff41f","isMergeCommit":false,"messageTitle":"Converted if-else chain to switch statement","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":30}}},{"hash":"620b1af2da7c57936d317d3a5d3f0318e0631722","isMergeCommit":false,"messageTitle":"Added in todo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"83be3198a5ffd93689fa4eb487c57265548744f2","isMergeCommit":false,"messageTitle":"Added in Todo class to represent Todo event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}},{"hash":"92dec94f9625383f281bbb87a6c4522ba8b9b34f","isMergeCommit":false,"messageTitle":"Added in UiFormatter class for formatting objects of type Task","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":0}}},{"hash":"1ddf9793afc436d1e886522bae0ac4095eb9cb7d","isMergeCommit":false,"messageTitle":"completed \"todo\" command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":2}}},{"hash":"8ab10ba94c203b040a848338a9cb5c97e2c25a62","isMergeCommit":false,"messageTitle":"removed default add task, and changed print statements to use UiFormatter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":8}}},{"hash":"aa02ffab6a8fc825b0fe43957b88d18a9e27f79f","isMergeCommit":false,"messageTitle":"Added in Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"5fd772a81b82f76f518667a986b44cc116ed49da","isMergeCommit":false,"messageTitle":"Added in formatting for Deadline objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"b293421d5f689a97effefd3e5193e4f0fa0106b6","isMergeCommit":false,"messageTitle":"Added in deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}}]},{"date":"2023-08-23","commitResults":[{"hash":"9f639de3829c1e5d8daa94b76289f53fd8bb8827","isMergeCommit":false,"messageTitle":"Added in Event class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"16cb6b6ff32d7ee3a8fb214014345da0b3ac0f42","isMergeCommit":false,"messageTitle":"Added in Event class to displayTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":0}}},{"hash":"b4af2cfbc1a3798dc7b61b99305ba167214ffff2","isMergeCommit":false,"messageTitle":"Added in Event command","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":0}}},{"hash":"f7fc11bccf2470470153ead65edf3e1bb13ffabf","isMergeCommit":false,"messageTitle":"Added in input testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"3dfb3a8d2af0b759fd94f36cd45c3a6f542fe518","isMergeCommit":false,"messageTitle":"Added in exception handling for mark and unmark commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":15}}},{"hash":"b7384cda1177eb094be86459b0dafe6c8dd29a64","isMergeCommit":false,"messageTitle":"Added in exception handling for end of line","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":2}}},{"hash":"83f297976e48dc683d69a7eb4316b1d58866e41e","isMergeCommit":false,"messageTitle":"Added in empty list check for list command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":0}}},{"hash":"510c9eb7cc9b6597ecfde7ee57cd757b2ac5521a","isMergeCommit":false,"messageTitle":"Added in exception handling for todo command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":5}}},{"hash":"4ffd55777519714e535bf0dbc71fbc2edbda4a52","isMergeCommit":false,"messageTitle":"Added in exception handling for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":8}}},{"hash":"4f50adf72971fe54e1d8bc70e552839dd0bbcbdd","isMergeCommit":false,"messageTitle":"Added in exception handling for event command","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":13}}}]},{"date":"2023-08-24","commitResults":[{"hash":"1036360dc848b827a9715eb065dd553142e91bd3","isMergeCommit":false,"messageTitle":"Added in case for deleting entries from the list","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":1}}},{"hash":"752aa3b6d4346be95f552c85d0f819f2e197a538","isMergeCommit":true,"messageTitle":"Merge pull request #1 from SynapseProgramming/devel","messageBody":"Completed week 2 tasks","fileTypesAndContributionMap":{}}]},{"date":"2023-08-27","commitResults":[{"hash":"2d7c02079abf478b3a10917dfb40497639bbcdfc","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Level-7","messageBody":"* add-gradle-support:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"1266a00de68a2ebbf6eed26d0c113898ffc185a0","isMergeCommit":false,"messageTitle":"Add json library as a dependency","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":3,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"0fff40c39e33eda6cb5128e0fbaeca0bb7ac383c","isMergeCommit":false,"messageTitle":"Add in Tasklistloader class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":0}}},{"hash":"70d745c2f027557ec2b2be6c48e7489a76e5e04f","isMergeCommit":false,"messageTitle":"Add in test json file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"c6fc339d09b52a1d052298b0661cac1287a9b470","isMergeCommit":false,"messageTitle":"Enable polymorphism for json Task parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"f377b3ee66bf57e0d94469c0635e8431f37d4f0d","isMergeCommit":false,"messageTitle":"Modify description field of Task class to private","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"2eb3e1fc0a4795485cb56b7ae643a4dd7b7d21d2","isMergeCommit":false,"messageTitle":"Fix missing fields in json file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":10}}},{"hash":"b398d003fe7df0da2741936c0457209da5a806ef","isMergeCommit":false,"messageTitle":"Modify access of description class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"b20bd5f86f411316f1ad75b80fa165a683db7249","isMergeCommit":false,"messageTitle":"Add in first working json serializing/ deserializing attempt","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":6}}}]},{"date":"2023-08-29","commitResults":[{"hash":"e08b009480795a21fe0823f50d2d829cae7799d1","isMergeCommit":false,"messageTitle":"Remove commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"2a1935e939be676b75fc53ce23cfa9df0738f3ab","isMergeCommit":false,"messageTitle":"Code linting","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":2}}},{"hash":"92394c7d2fced822bd88623fd5207ab11945ef07","isMergeCommit":false,"messageTitle":"Add in empty constructor required by Jackson library","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"69676dee55f0afd869e5f3f2aedbbfd505f9497d","isMergeCommit":false,"messageTitle":"Remove unused headers and comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":6}}},{"hash":"d95bb5c643b50464caa5007ea04d5740e4fa3299","isMergeCommit":false,"messageTitle":"Fix class field visibility for Jackon. \u0026 Save previous data to arraylist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}},{"hash":"f3a868d0274eb1decbfae1f6fa5bb35112e0369b","isMergeCommit":false,"messageTitle":"change done to boolean object type","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"324ebe865d995928cf332233a26a509abd06aa4d","isMergeCommit":false,"messageTitle":"Remove print test statements and commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":8}}},{"hash":"4a80709181364571e0168a46829b97533a129229","isMergeCommit":false,"messageTitle":"Place save tasks function to end of main function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":2}}},{"hash":"3698ca926892b8285891af0b7e0dc828aeaf320f","isMergeCommit":false,"messageTitle":"Add in more verbose warning for ( tasks.json not found)","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"ba398b9a123f7884d851e863d362c81eb4713df4","isMergeCommit":true,"messageTitle":"Merge pull request #2 from SynapseProgramming/branch-Level-7","messageBody":"Add task save to json file","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"3ba4a4eab3258662c2252648cecc66bd0dce231e","isMergeCommit":false,"messageTitle":"Add DeadTime support for parser","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":2,"deletions":0}}},{"hash":"b897a1d62d667622cb8b1d25d2f1aa59dde31d5b","isMergeCommit":false,"messageTitle":"Change date field to LocalDate type for Deadline class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":3}}},{"hash":"3e9087a23fbcd5d43065d4fffda87f9eec0c5534","isMergeCommit":false,"messageTitle":"Add in string formatting to Localdate type for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"9f48ef4302046558dbbcc9158205b9df671b12e5","isMergeCommit":false,"messageTitle":"Remove toto and test print statements","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":3}}}]},{"date":"2023-08-30","commitResults":[{"hash":"6b5795d7bec7377c450d7fe598e725cad8f81365","isMergeCommit":true,"messageTitle":"Merge pull request #3 from SynapseProgramming/branch-Level-8","messageBody":"Change deaddate field from string type to Date type","fileTypesAndContributionMap":{}},{"hash":"9b52c284edf6ef1cd0d20f61ce765ecfbcea8676","isMergeCommit":false,"messageTitle":"Rename ReceivedTasks to TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"2f6b44637381a727654f17c896dde388c8a524a3","isMergeCommit":false,"messageTitle":"Rename Tasklistloader to Storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}},{"hash":"da38f669d42ab65d7285369fa46c06d15689776e","isMergeCommit":false,"messageTitle":"Add in initial parser class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":38,"deletions":3}}},{"hash":"dd800a99683fe8befd595700ff1519f066c29212","isMergeCommit":false,"messageTitle":"Remove commented code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":3}}},{"hash":"a18874ba037f99f786701e76b5986c65ddfc7b63","isMergeCommit":false,"messageTitle":"Add in getIndex function into parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":3}}},{"hash":"464bef9d7c370ad376e29c090f339ed8aa22029d","isMergeCommit":false,"messageTitle":"Add in getIndex function call for unmark command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"4046fa9ff61272777cee50af8afd21ff1aa8526b","isMergeCommit":false,"messageTitle":"Add in getCommandString function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":3}}},{"hash":"35180aace669e8020de7bbb32d9ad7c3c968faab","isMergeCommit":false,"messageTitle":"Added in getTaskName function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":3}}},{"hash":"7188f53999b3ffefcd0c0386162e77fc1d22cde1","isMergeCommit":false,"messageTitle":"Add getTask name for deadline command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"5bcff6a3541b6f6d87e49873cd8ddaa7a0aca353","isMergeCommit":false,"messageTitle":"Add in getIndex for remove command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":4}}},{"hash":"4a128f3d79cc66ec46603cd56813f0d89be72932","isMergeCommit":false,"messageTitle":"Rename class UiFormatter to Ui","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"01be0b0055ba8d9056023e0c9e38d972116f2f22","isMergeCommit":false,"messageTitle":"Remove unused variables","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":4}}},{"hash":"1d6e13df250200e2ddf55aa9f338bceac51ce774","isMergeCommit":false,"messageTitle":"Remove unused variables and added in isInputThere function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":4}}}]},{"date":"2023-08-31","commitResults":[{"hash":"30bd3d7a44eff74e25409f5a25ae3841ff59f3c5","isMergeCommit":false,"messageTitle":"Change TaskList to be the main array for storing tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}},{"hash":"71e2efa0d6657523bd080cd4abb3c1aee80cc19f","isMergeCommit":false,"messageTitle":"Change Storage class to handle tasklist","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":10}}},{"hash":"aa108eda1e195da71c572621dc86266918b6b104","isMergeCommit":false,"messageTitle":"Change taskList to be of type TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"3a9c099fd39053832ada868e4223c4c98dcf3736","isMergeCommit":false,"messageTitle":"Code refactor for main function","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":7}}},{"hash":"fa1ab0e59cb651b46cea113dfaad4b8d62aa59ec","isMergeCommit":true,"messageTitle":"Merge pull request #4 from SynapseProgramming/devel","messageBody":"Completed more OOP part. ","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"f6705ed98b28f1a46f9dad4dfa6998e2a049f905","isMergeCommit":false,"messageTitle":"Move all task related classes to tasks package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":14}}},{"hash":"2309f470fabae1595144ec85eca5afb9e33c9cda","isMergeCommit":false,"messageTitle":"change import to get task related stuff from task package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":2}}},{"hash":"ad2fe54155287debe70696bff272777fe3fc7f3b","isMergeCommit":false,"messageTitle":"Move storage class to storage package","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":0}}},{"hash":"a07be856e12d4c437fb07c44e0858f0d8be80ade","isMergeCommit":false,"messageTitle":"Move parser and ui class to io folder","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":1}}},{"hash":"a4e7879c6857e98a46cc5f2728b39a34cd7d66a1","isMergeCommit":false,"messageTitle":"update main duke class to import classes from the new packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":0}}},{"hash":"c12182c7ba714c38c984bab411aeef083e1093bd","isMergeCommit":true,"messageTitle":"Merge pull request #5 from SynapseProgramming/devel","messageBody":"Organised code into packages","fileTypesAndContributionMap":{}},{"hash":"8320b341347136090649c49b0a88b298b9254848","isMergeCommit":false,"messageTitle":"add in parseDeadline function, which handles parsing for deadline command.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":0}}},{"hash":"345646bf4b6eff362895be5a7a7bc562782f9535","isMergeCommit":false,"messageTitle":"Add in custom exception for Parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":0}}},{"hash":"2fb7cecc46cf5b931e1d36a1df96e5e0859f8880","isMergeCommit":false,"messageTitle":"Integrate parser exception for parseDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":23}}},{"hash":"89d4f03a182a763c2ec530118691af30d91d66b7","isMergeCommit":false,"messageTitle":"Add in parseEvent function and modified duke run function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":16}}},{"hash":"91413a691b7b0624e76b68545338011226ef2bb4","isMergeCommit":false,"messageTitle":"Remove unused headers","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":5}}},{"hash":"467b51b3e234158d71d374ef83e6619945377c6d","isMergeCommit":false,"messageTitle":"Add in display greetings function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"9c5bec3db52e0ed11fd5c7848c63c5b13a388b85","isMergeCommit":false,"messageTitle":"Add in display action function to ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}},{"hash":"d7b2d951c06f4f69f673e489e967d2dd1a478cb2","isMergeCommit":false,"messageTitle":"Change print + action statements to use displayAction function.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"670c19e4d82476a4c820f8fc404725b5d5afa023","isMergeCommit":false,"messageTitle":"Add in displayGoodbye function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":2}}},{"hash":"0b39d9f2a086d95d4a1cbc7cb53729464aa3c40c","isMergeCommit":false,"messageTitle":"Add listTasks function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":14}}},{"hash":"498cd6094626414d8c859d6c9beab03286a89153","isMergeCommit":false,"messageTitle":"Add markTaskAsDone function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":9}}},{"hash":"f3cd9c5aad1815d7ab8b3df43a0846b35b62e562","isMergeCommit":false,"messageTitle":"Add unmarkTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":11}}},{"hash":"58fb305dc4e76b9bf28dbf12b1a1a40d5c18cb13","isMergeCommit":false,"messageTitle":"Add in addTodo function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":9}}},{"hash":"889a7fba03e370471325bfd55b9b06df25cc0279","isMergeCommit":false,"messageTitle":"Add in addDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":9}}},{"hash":"d1b027f36f7aae60ab81929a53622e75c2d1bb2e","isMergeCommit":false,"messageTitle":"Add in addEvent function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":7}}},{"hash":"2bca407321382cb38efc66688d9840d0243a7a91","isMergeCommit":false,"messageTitle":"Add in deleteTask function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":14}}},{"hash":"431cdc261810c43551c6c0241aa43f3b6047bc81","isMergeCommit":true,"messageTitle":"Merge pull request #6 from SynapseProgramming/devel","messageBody":"Code Refactoring and custom exceptions","fileTypesAndContributionMap":{}},{"hash":"470a2dd4ff32d59b48f72826d6d2be87597b0707","isMergeCommit":false,"messageTitle":"Add in J-unit test case for parseEvent function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"8c7ade6fce485cea34abb51ac261d8f0748e3d48","isMergeCommit":false,"messageTitle":"Add in additional tests for parseDeadline function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":47,"deletions":2}}},{"hash":"cdc1181daac42f76d05adb37913359f658f643a0","isMergeCommit":false,"messageTitle":"Add in UiTest test file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":0}}},{"hash":"094a8fb32b8b68a1cbb2ea0ed62bdde94a3ea48b","isMergeCommit":false,"messageTitle":"Add in additional tests for displayTask function","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":0}}},{"hash":"6db809212d4e3d7c9510c8ba4b9966ce3c4e19a1","isMergeCommit":true,"messageTitle":"Merge pull request #7 from SynapseProgramming/devel","messageBody":"Add in J-unit tests","fileTypesAndContributionMap":{}},{"hash":"0e76be6de3f3e7cc8c0e27947198acaf9a00c4fc","isMergeCommit":false,"messageTitle":"Move Duke class to another packaged called duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"a1546c259dec2247fbb19781580682b632a83d87","isMergeCommit":false,"messageTitle":"Add in jar file creation","messageBody":"","tags":["V0.1","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}},{"hash":"b3667c434572b1505a5c791aee9c4f5c5e94f549","isMergeCommit":true,"messageTitle":"Merge pull request #8 from SynapseProgramming/devel","messageBody":"Add in .jar file compilation settings, and moved duke class to its own package","fileTypesAndContributionMap":{}},{"hash":"f800e19738335518ab62598feb4383c8dae10125","isMergeCommit":false,"messageTitle":"Add in javadoc comments for all parser functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":1}}},{"hash":"3c84e35d89595858583b694ae7d0156f281a80e9","isMergeCommit":false,"messageTitle":"Add in javadoc comments for Storage functions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":1}}},{"hash":"6000e3fc636060df4c49fdc025a08d3c125a7325","isMergeCommit":false,"messageTitle":"Add in javadoc comments for Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":2}}},{"hash":"f30cb0220ae1c9b5ac1accf629c3c9fcb9bedb90","isMergeCommit":false,"messageTitle":"Add in javadoc comments for all classes","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":0}}},{"hash":"2e2f565104d7cf8f4f07d2d57cfc9bf4f6dd7c70","isMergeCommit":false,"messageTitle":"Apply updated code linting","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":374,"deletions":371}}},{"hash":"ffabe4470ce120bf6b3fc3bd9995e82357d9ffa5","isMergeCommit":false,"messageTitle":"Add in find function","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":193,"deletions":160}}},{"hash":"ffb61d42e32055141b89623e6df675bb1cfd10a0","isMergeCommit":true,"messageTitle":"Merge level-9 branch with main","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6d0fe108c0ad0977faa410fe14f6fcae8cae16a8","isMergeCommit":true,"messageTitle":"Merge javadoc branch with main","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SynapseProgramming":{"java":876,"md":2,"fxml":0,"sh":1,"bat":1,"gradle":5,"txt":9}},"authorContributionVariance":{"SynapseProgramming":97935.695},"authorDisplayNameMap":{"SynapseProgramming":"CS2103T-W10-3 ONG ..OALD"}} diff --git a/Tang-Moyan_ip_master/authorship.json b/Tang-Moyan_ip_master/authorship.json index 6f33d296..794140e4 100644 --- a/Tang-Moyan_ip_master/authorship.json +++ b/Tang-Moyan_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"import HelperClass.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"Tang-Moyan"},"content":" private static void printOneLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"---------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Tang-Moyan"},"content":" private static final String MyName \u003d \"Rio\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Tang-Moyan"},"content":" public static void Greet() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Hello! I\u0027m \" + MyName);","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Tang-Moyan"},"content":" public static void Exit() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Tang-Moyan"},"content":" private static String getUserTaskName() {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Tang-Moyan"},"content":" String taskName \u003d getUserInput.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Tang-Moyan"},"content":" if (taskName.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OOPS!!! The name of a task cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Tang-Moyan"},"content":" return \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Tang-Moyan"},"content":" return taskName;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":37,"author":{"gitId":"-"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":39,"author":{"gitId":"-"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2019-07-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2019-07-29"},{"lineNumber":43,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Tang-Moyan"},"content":" Greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Tang-Moyan"},"content":" boolean wantToExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserIndex \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Tang-Moyan"},"content":" Task[] userList \u003d new Task[100];","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Tang-Moyan"},"content":" int listPointer \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Tang-Moyan"},"content":" while (!(wantToExit)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Tang-Moyan"},"content":" String userInput \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"Tang-Moyan"},"content":" switch (userInput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"Tang-Moyan"},"content":" case \"bye\":","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"Tang-Moyan"},"content":" wantToExit \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"Tang-Moyan"},"content":" Exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"Tang-Moyan"},"content":" case \"list\":","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"Tang-Moyan"},"content":" if (listPointer \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"No items in the list yet\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"Tang-Moyan"},"content":" for (int i \u003d 0; i \u003c listPointer; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"Tang-Moyan"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(num + userList[i].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"Tang-Moyan"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"Tang-Moyan"},"content":" int index \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"Tang-Moyan"},"content":" if (index \u003c 0 || index \u003e\u003d listPointer) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Tang-Moyan"},"content":" userList[index].markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"Tang-Moyan"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"Tang-Moyan"},"content":" int i \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"Tang-Moyan"},"content":" if (i \u003c 0 || i \u003e\u003d listPointer) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"Tang-Moyan"},"content":" userList[i].unmarkDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"Tang-Moyan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"Tang-Moyan"},"content":" String taskName \u003d getUserTaskName();","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Tang-Moyan"},"content":" if (!(taskName.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(taskName, 1, \"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"Tang-Moyan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"Tang-Moyan"},"content":" String taskN \u003d getUserTaskName();","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Tang-Moyan"},"content":" if (!(taskN.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter deadline:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"Tang-Moyan"},"content":" String timePeriod \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(taskN, 2, \"by:\" + timePeriod);","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"Tang-Moyan"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":143,"author":{"gitId":"Tang-Moyan"},"content":" String tN \u003d getUserTaskName();","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Tang-Moyan"},"content":" if (!(tN.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter start time:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"Tang-Moyan"},"content":" String startTime \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter end time:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":148,"author":{"gitId":"Tang-Moyan"},"content":" String endTime \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":149,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(tN, 3, \"from: \" + startTime + \" to: \" + endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":151,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":152,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":153,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"Tang-Moyan"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":162,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"Tang-Moyan"},"content":" int ind \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"Tang-Moyan"},"content":" if (ind \u003c 0 || ind \u003e\u003d listPointer) {","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":166,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":167,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":168,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":169,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":170,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-09-01"},{"lineNumber":171,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":172,"author":{"gitId":"Tang-Moyan"},"content":" Task[] newUserList \u003d new Task[100];","lastModifiedDate":"2023-09-01"},{"lineNumber":173,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":174,"author":{"gitId":"Tang-Moyan"},"content":" for (int a \u003d 0, k \u003d 0; a \u003c listPointer; a++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":175,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":176,"author":{"gitId":"Tang-Moyan"},"content":" // if the index is","lastModifiedDate":"2023-09-01"},{"lineNumber":177,"author":{"gitId":"Tang-Moyan"},"content":" // the removal element index","lastModifiedDate":"2023-09-01"},{"lineNumber":178,"author":{"gitId":"Tang-Moyan"},"content":" if (a \u003d\u003d ind) {","lastModifiedDate":"2023-09-01"},{"lineNumber":179,"author":{"gitId":"Tang-Moyan"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":182,"author":{"gitId":"Tang-Moyan"},"content":" // if the index is not","lastModifiedDate":"2023-09-01"},{"lineNumber":183,"author":{"gitId":"Tang-Moyan"},"content":" // the removal element index","lastModifiedDate":"2023-09-01"},{"lineNumber":184,"author":{"gitId":"Tang-Moyan"},"content":" newUserList[k++] \u003d userList[a];","lastModifiedDate":"2023-09-01"},{"lineNumber":185,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":186,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":187,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":188,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":189,"author":{"gitId":"Tang-Moyan"},"content":" userList \u003d newUserList;","lastModifiedDate":"2023-09-01"},{"lineNumber":190,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":191,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":192,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":193,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":194,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":195,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":196,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":197,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":198,"author":{"gitId":"Tang-Moyan"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-01"},{"lineNumber":200,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":211,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Tang-Moyan":201,"-":10}},{"path":"src/main/java/HelperClass/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"package HelperClass;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"public class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Tang-Moyan"},"content":" private int type;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Tang-Moyan"},"content":" private String timePeriod;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Tang-Moyan"},"content":" private String taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Tang-Moyan"},"content":" public Task(String taskName, int type, String timePeriod) {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"Tang-Moyan"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"Tang-Moyan"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Tang-Moyan"},"content":" this.timePeriod \u003d timePeriod;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Tang-Moyan"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Tang-Moyan"},"content":" public void markDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Tang-Moyan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"[X] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Tang-Moyan"},"content":" public void unmarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Tang-Moyan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"[ ] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Tang-Moyan"},"content":" public String display() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Tang-Moyan"},"content":" String description \u003d \"[\";","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Tang-Moyan"},"content":" switch (this.type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Tang-Moyan"},"content":" case 1:","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"T]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Tang-Moyan"},"content":" case 2:","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"D]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Tang-Moyan"},"content":" case 3:","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"E]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Tang-Moyan"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"[X] \" + taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"[ ] \" + taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Tang-Moyan"},"content":" if (!(this.type \u003d\u003d 1)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \" (\" + timePeriod + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Tang-Moyan"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"Tang-Moyan"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Tang-Moyan":57}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"todo","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"read book","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":"bye","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Tang-Moyan":3}}] +[{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.Objects;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"Tang-Moyan"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"Tang-Moyan"},"content":"import java.io.File;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"Tang-Moyan"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"Tang-Moyan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Tang-Moyan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Tang-Moyan"},"content":"import HelperClass.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"Tang-Moyan"},"content":" private static void printOneLine() {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"---------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Tang-Moyan"},"content":" private static final String MyName \u003d \"Rio\";","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Tang-Moyan"},"content":" public static void Greet() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Hello! I\u0027m \" + MyName);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Tang-Moyan"},"content":" public static void Exit() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Tang-Moyan"},"content":" private static String GetUserTaskName() {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Tang-Moyan"},"content":" String taskName \u003d getUserInput.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Tang-Moyan"},"content":" if (taskName.isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OOPS!!! The name of a task cannot be empty.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"Tang-Moyan"},"content":" return \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Tang-Moyan"},"content":" return taskName;","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"Tang-Moyan"},"content":" private static void BackgroundSetUp() {","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"Tang-Moyan"},"content":" String directoryName \u003d \"data\";","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"Tang-Moyan"},"content":" String fileName \u003d \"list.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"Tang-Moyan"},"content":" File dir \u003d new File(directoryName);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"Tang-Moyan"},"content":" if (!(dir.exists())) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"Tang-Moyan"},"content":" if (dir.mkdir()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Directory \u0027\" + directoryName + \"\u0027 created.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"Tang-Moyan"},"content":" System.err.println(\"Failed to create directory \u0027\" + directoryName + \"\u0027.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"Tang-Moyan"},"content":" return;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Tang-Moyan"},"content":" File file \u003d new File(dir, fileName);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Tang-Moyan"},"content":" if (!(file.exists())) {","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Tang-Moyan"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Tang-Moyan"},"content":" if (file.createNewFile()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"File \u0027\" + fileName + \"\u0027 created in directory \u0027\" + directoryName + \"\u0027.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Tang-Moyan"},"content":" System.err.println(\"Failed to create file \u0027\" + fileName + \"\u0027 in directory \u0027\" + directoryName + \"\u0027.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Tang-Moyan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Tang-Moyan"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Tang-Moyan"},"content":" private static List\u003cString\u003e ReadLine(String line) {","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Tang-Moyan"},"content":" List\u003cString\u003e formattedLine \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Tang-Moyan"},"content":" Scanner lineScanner \u003d new Scanner(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Tang-Moyan"},"content":" while (lineScanner.hasNext()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Tang-Moyan"},"content":" String token \u003d lineScanner.next();","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Tang-Moyan"},"content":" formattedLine.add(token);","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Tang-Moyan"},"content":" lineScanner.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Tang-Moyan"},"content":" return formattedLine;","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":88,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":89,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":90,"author":{"gitId":"Tang-Moyan"},"content":" private static Task[] LoadList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"Tang-Moyan"},"content":" Task[] userList \u003d new Task[100];","lastModifiedDate":"2023-09-04"},{"lineNumber":92,"author":{"gitId":"Tang-Moyan"},"content":" int positionPointer \u003d 0;","lastModifiedDate":"2023-09-04"},{"lineNumber":93,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":94,"author":{"gitId":"Tang-Moyan"},"content":" String fileName \u003d \"data/list.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":95,"author":{"gitId":"Tang-Moyan"},"content":" Path path \u003d Paths.get(fileName);","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"Tang-Moyan"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"Tang-Moyan"},"content":" Scanner fileScanner \u003d new Scanner(path);","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"Tang-Moyan"},"content":" while(fileScanner.hasNextLine()){","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"Tang-Moyan"},"content":" // Record format: \"Type | Status | Name | Time\"","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"Tang-Moyan"},"content":" // example: \"D | 0 | return book | June 6th\"","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"Tang-Moyan"},"content":" // \"0\" for not done and \"1\" for done","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"Tang-Moyan"},"content":" String line \u003d fileScanner.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"Tang-Moyan"},"content":" List\u003cString\u003e formattedLine \u003d ReadLine(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"Tang-Moyan"},"content":" List\u003cString\u003e attributes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"Tang-Moyan"},"content":" String attributeName \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":112,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"Tang-Moyan"},"content":" for (Object element : formattedLine) {","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"Tang-Moyan"},"content":" if (element.equals(\"|\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"Tang-Moyan"},"content":" attributes.add(attributeName);","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"Tang-Moyan"},"content":" attributeName \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"Tang-Moyan"},"content":" attributeName \u003d attributeName + element + \" \";","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"Tang-Moyan"},"content":" attributes.add(attributeName);","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"Tang-Moyan"},"content":" boolean isDone \u003d attributes.get(1).equals(\"1\");","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"Tang-Moyan"},"content":" switch (attributes.get(0)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"Tang-Moyan"},"content":" case \"T\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"Tang-Moyan"},"content":" Task task \u003d new Task(attributes.get(2), 1, \"Null\", isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"Tang-Moyan"},"content":" userList[positionPointer] \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"Tang-Moyan"},"content":" case \"D\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"Tang-Moyan"},"content":" Task task \u003d new Task(attributes.get(2), 2, attributes.get(3), isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"Tang-Moyan"},"content":" userList[positionPointer] \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":137,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":138,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"Tang-Moyan"},"content":" case \"E\": {","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"Tang-Moyan"},"content":" Task task \u003d new Task(attributes.get(2), 3, attributes.get(3), isDone);","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"Tang-Moyan"},"content":" userList[positionPointer] \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":142,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":143,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":144,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":145,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":146,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":147,"author":{"gitId":"Tang-Moyan"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":148,"author":{"gitId":"Tang-Moyan"},"content":" throw new IllegalStateException(\"Unexpected value: \" + attributes.get(0));","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":150,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":151,"author":{"gitId":"Tang-Moyan"},"content":" positionPointer++;","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":155,"author":{"gitId":"Tang-Moyan"},"content":" fileScanner.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":156,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":157,"author":{"gitId":"Tang-Moyan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":158,"author":{"gitId":"Tang-Moyan"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":159,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":160,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":161,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"Tang-Moyan"},"content":" return userList;","lastModifiedDate":"2023-09-04"},{"lineNumber":163,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":164,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":165,"author":{"gitId":"Tang-Moyan"},"content":" private static void SaveList(Task[] userList, int numberOfElements) {","lastModifiedDate":"2023-09-04"},{"lineNumber":166,"author":{"gitId":"Tang-Moyan"},"content":" String fileName \u003d \"data/list.txt\";","lastModifiedDate":"2023-09-04"},{"lineNumber":167,"author":{"gitId":"Tang-Moyan"},"content":" try (FileWriter writer \u003d new FileWriter(fileName)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":168,"author":{"gitId":"Tang-Moyan"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":169,"author":{"gitId":"Tang-Moyan"},"content":" writer.write(userList[i].ForRecordingInTextFile());","lastModifiedDate":"2023-09-04"},{"lineNumber":170,"author":{"gitId":"Tang-Moyan"},"content":" writer.write(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":171,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":172,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":173,"author":{"gitId":"Tang-Moyan"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":174,"author":{"gitId":"Tang-Moyan"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":175,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":176,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":178,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":179,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":180,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":181,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":183,"author":{"gitId":"-"},"content":" String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":184,"author":{"gitId":"-"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":185,"author":{"gitId":"-"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":186,"author":{"gitId":"-"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2019-07-29"},{"lineNumber":187,"author":{"gitId":"-"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2019-07-29"},{"lineNumber":188,"author":{"gitId":"-"},"content":" System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2019-07-29"},{"lineNumber":189,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":190,"author":{"gitId":"Tang-Moyan"},"content":" BackgroundSetUp();","lastModifiedDate":"2023-09-04"},{"lineNumber":191,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"Tang-Moyan"},"content":" Greet();","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"Tang-Moyan"},"content":" boolean wantToExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"Tang-Moyan"},"content":" Scanner getUserIndex \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"Tang-Moyan"},"content":" Task[] userList \u003d LoadList();","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"Tang-Moyan"},"content":" int listPointer \u003d 0;","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"Tang-Moyan"},"content":" while (!(wantToExit)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"Tang-Moyan"},"content":" String userInput \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":204,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":205,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":206,"author":{"gitId":"Tang-Moyan"},"content":" switch (userInput) {","lastModifiedDate":"2023-08-30"},{"lineNumber":207,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":208,"author":{"gitId":"Tang-Moyan"},"content":" case \"bye\":","lastModifiedDate":"2023-08-30"},{"lineNumber":209,"author":{"gitId":"Tang-Moyan"},"content":" wantToExit \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":210,"author":{"gitId":"Tang-Moyan"},"content":" getUserInput.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":211,"author":{"gitId":"Tang-Moyan"},"content":" getUserIndex.close();","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"Tang-Moyan"},"content":" Exit();","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"Tang-Moyan"},"content":" case \"list\":","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":218,"author":{"gitId":"Tang-Moyan"},"content":" if (listPointer \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"No items in the list yet\");","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"Tang-Moyan"},"content":" for (int i \u003d 0; i \u003c listPointer; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":222,"author":{"gitId":"Tang-Moyan"},"content":" int num \u003d i + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":223,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(num + userList[i].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":224,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":225,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":226,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":227,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":228,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":229,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":230,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":231,"author":{"gitId":"Tang-Moyan"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":232,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":233,"author":{"gitId":"Tang-Moyan"},"content":" int index \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":234,"author":{"gitId":"Tang-Moyan"},"content":" if (index \u003c 0 || index \u003e\u003d listPointer) {","lastModifiedDate":"2023-08-30"},{"lineNumber":235,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":236,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":237,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":238,"author":{"gitId":"Tang-Moyan"},"content":" userList[index].markDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":239,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":240,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":241,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":242,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":243,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":244,"author":{"gitId":"Tang-Moyan"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":245,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":246,"author":{"gitId":"Tang-Moyan"},"content":" int i \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":247,"author":{"gitId":"Tang-Moyan"},"content":" if (i \u003c 0 || i \u003e\u003d listPointer) {","lastModifiedDate":"2023-08-30"},{"lineNumber":248,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":250,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":251,"author":{"gitId":"Tang-Moyan"},"content":" userList[i].unmarkDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":252,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":253,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":254,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":255,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":256,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":257,"author":{"gitId":"Tang-Moyan"},"content":" case \"todo\":","lastModifiedDate":"2023-08-30"},{"lineNumber":258,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":259,"author":{"gitId":"Tang-Moyan"},"content":" String taskName \u003d GetUserTaskName();","lastModifiedDate":"2023-09-04"},{"lineNumber":260,"author":{"gitId":"Tang-Moyan"},"content":" if (!(taskName.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":261,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(taskName, 1, \"Null\", false);","lastModifiedDate":"2023-09-04"},{"lineNumber":262,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":263,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":264,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":265,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":266,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":267,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":268,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":269,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":270,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":271,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":272,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":273,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":274,"author":{"gitId":"Tang-Moyan"},"content":" case \"deadline\":","lastModifiedDate":"2023-08-30"},{"lineNumber":275,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":276,"author":{"gitId":"Tang-Moyan"},"content":" String taskN \u003d GetUserTaskName();","lastModifiedDate":"2023-09-04"},{"lineNumber":277,"author":{"gitId":"Tang-Moyan"},"content":" if (!(taskN.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":278,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter deadline:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":279,"author":{"gitId":"Tang-Moyan"},"content":" String timePeriod \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":280,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(taskN, 2, \"by:\" + timePeriod, false);","lastModifiedDate":"2023-09-04"},{"lineNumber":281,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":282,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":283,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":284,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":285,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":286,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":287,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":288,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":289,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":290,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":291,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":292,"author":{"gitId":"Tang-Moyan"},"content":" case \"event\":","lastModifiedDate":"2023-08-30"},{"lineNumber":293,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter task name:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":294,"author":{"gitId":"Tang-Moyan"},"content":" String tN \u003d GetUserTaskName();","lastModifiedDate":"2023-09-04"},{"lineNumber":295,"author":{"gitId":"Tang-Moyan"},"content":" if (!(tN.isEmpty())) {","lastModifiedDate":"2023-09-01"},{"lineNumber":296,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter start time:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":297,"author":{"gitId":"Tang-Moyan"},"content":" String startTime \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":298,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter end time:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":299,"author":{"gitId":"Tang-Moyan"},"content":" String endTime \u003d getUserInput.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":300,"author":{"gitId":"Tang-Moyan"},"content":" String timePeriod \u003d \"from: \" + startTime + \" to: \" + endTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":301,"author":{"gitId":"Tang-Moyan"},"content":" userList[listPointer] \u003d new Task(tN, 3, timePeriod, false);","lastModifiedDate":"2023-09-04"},{"lineNumber":302,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":303,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":304,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":305,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-08-30"},{"lineNumber":306,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":307,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":308,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":309,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":310,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":311,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":312,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":313,"author":{"gitId":"Tang-Moyan"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":314,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Enter index:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":315,"author":{"gitId":"Tang-Moyan"},"content":" int ind \u003d getUserIndex.nextInt() - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":316,"author":{"gitId":"Tang-Moyan"},"content":" if (ind \u003c 0 || ind \u003e\u003d listPointer) {","lastModifiedDate":"2023-09-01"},{"lineNumber":317,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Invalid index.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":318,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":319,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":320,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":321,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":322,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(userList[listPointer].display());","lastModifiedDate":"2023-09-01"},{"lineNumber":323,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":324,"author":{"gitId":"Tang-Moyan"},"content":" Task[] newUserList \u003d new Task[100];","lastModifiedDate":"2023-09-01"},{"lineNumber":325,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":326,"author":{"gitId":"Tang-Moyan"},"content":" for (int a \u003d 0, k \u003d 0; a \u003c listPointer; a++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":327,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":328,"author":{"gitId":"Tang-Moyan"},"content":" // if the index is","lastModifiedDate":"2023-09-01"},{"lineNumber":329,"author":{"gitId":"Tang-Moyan"},"content":" // the removal element index","lastModifiedDate":"2023-09-01"},{"lineNumber":330,"author":{"gitId":"Tang-Moyan"},"content":" if (a \u003d\u003d ind) {","lastModifiedDate":"2023-09-01"},{"lineNumber":331,"author":{"gitId":"Tang-Moyan"},"content":" continue;","lastModifiedDate":"2023-09-01"},{"lineNumber":332,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":333,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":334,"author":{"gitId":"Tang-Moyan"},"content":" // if the index is not","lastModifiedDate":"2023-09-01"},{"lineNumber":335,"author":{"gitId":"Tang-Moyan"},"content":" // the removal element index","lastModifiedDate":"2023-09-01"},{"lineNumber":336,"author":{"gitId":"Tang-Moyan"},"content":" newUserList[k++] \u003d userList[a];","lastModifiedDate":"2023-09-01"},{"lineNumber":337,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":338,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":339,"author":{"gitId":"Tang-Moyan"},"content":" listPointer \u003d listPointer - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":340,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":341,"author":{"gitId":"Tang-Moyan"},"content":" userList \u003d newUserList;","lastModifiedDate":"2023-09-01"},{"lineNumber":342,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":343,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Now you have \" + listPointer + \" tasks in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":344,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":345,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":346,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":347,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":348,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":349,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":350,"author":{"gitId":"Tang-Moyan"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":351,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-01"},{"lineNumber":352,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":353,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":354,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":355,"author":{"gitId":"Tang-Moyan"},"content":" printOneLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":356,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":357,"author":{"gitId":"Tang-Moyan"},"content":" SaveList(userList, listPointer);","lastModifiedDate":"2023-09-04"},{"lineNumber":358,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":359,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":360,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":361,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":362,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":363,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":364,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":365,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":366,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":367,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":368,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":369,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Tang-Moyan":359,"-":10}},{"path":"src/main/java/HelperClass/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"package HelperClass;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"public class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"Tang-Moyan"},"content":" private int type;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"Tang-Moyan"},"content":" private String timePeriod;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"Tang-Moyan"},"content":" private String taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"Tang-Moyan"},"content":" public Task(String taskName, int type, String timePeriod, boolean isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"Tang-Moyan"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"Tang-Moyan"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"Tang-Moyan"},"content":" this.timePeriod \u003d timePeriod;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"Tang-Moyan"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"Tang-Moyan"},"content":" public void markDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"Tang-Moyan"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"[X] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"Tang-Moyan"},"content":" public void unmarkDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"Tang-Moyan"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"Tang-Moyan"},"content":" System.out.println(\"[ ] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"Tang-Moyan"},"content":" public String display() {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"Tang-Moyan"},"content":" String description \u003d \"[\";","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"Tang-Moyan"},"content":" switch (this.type) {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"Tang-Moyan"},"content":" case 1:","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"T]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"Tang-Moyan"},"content":" case 2:","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"D]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"Tang-Moyan"},"content":" case 3:","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"E]\";","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"Tang-Moyan"},"content":" if (isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"[X] \" + taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"[ ] \" + taskName;","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"Tang-Moyan"},"content":" if (!(this.type \u003d\u003d 1)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \" (\" + timePeriod + \")\";","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"Tang-Moyan"},"content":" return description;","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"Tang-Moyan"},"content":" public String ForRecordingInTextFile() {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"Tang-Moyan"},"content":" // Record format: \"Type | Status | Name | Time\"","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"Tang-Moyan"},"content":" // example: \"D | 0 | return book | June 6th\"","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"Tang-Moyan"},"content":" // \"0\" for not done and \"1\" for done","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"Tang-Moyan"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"Tang-Moyan"},"content":" switch (this.type) {","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"Tang-Moyan"},"content":" case 1:","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"T | \";","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"Tang-Moyan"},"content":" case 2:","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"D | \";","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"Tang-Moyan"},"content":" case 3:","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"E | \";","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"Tang-Moyan"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"Tang-Moyan"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"1 | \" + taskName;","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"Tang-Moyan"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \"0 | \" + taskName;","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"Tang-Moyan"},"content":" if (!(this.type \u003d\u003d 1)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"Tang-Moyan"},"content":" description \u003d description + \" | \" + timePeriod;","lastModifiedDate":"2023-09-04"},{"lineNumber":81,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":82,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"Tang-Moyan"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"Tang-Moyan"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"Tang-Moyan"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"Tang-Moyan"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"Tang-Moyan":89}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Tang-Moyan"},"content":"todo","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"Tang-Moyan"},"content":"read book","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"Tang-Moyan"},"content":"bye","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Tang-Moyan":3}}] diff --git a/Tang-Moyan_ip_master/commits.json b/Tang-Moyan_ip_master/commits.json index 3cafa1f2..d9b43e9c 100644 --- a/Tang-Moyan_ip_master/commits.json +++ b/Tang-Moyan_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Tang-Moyan":[{"date":"2023-08-24","commitResults":[{"hash":"f88b6b32bb87fbb42eb9debc9cd5901b5b9f9f49","isMergeCommit":false,"messageTitle":"Level 0 Rename, Greet, Exit","messageBody":"","tags":["Level_0","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"fedfbdec231d900841404fa0a31d85ef5ddb4af9","isMergeCommit":false,"messageTitle":"Added Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"30a8d0f3cc16b11f4d136027c753f844b6efbdca","isMergeCommit":false,"messageTitle":"Added Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":9}}},{"hash":"76e279d8d193b7f5cc5d9b588686e5212ea4ceab","isMergeCommit":false,"messageTitle":"Added Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":5}}},{"hash":"05bfd793eb631167cc6031dbfb6cab14fcff225f","isMergeCommit":false,"messageTitle":"Added Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":4}}}]},{"date":"2023-09-01","commitResults":[{"hash":"95571afe30bf6968e33b2f5f00b7c4f4d8652969","isMergeCommit":false,"messageTitle":"Added UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"6b91d86451bb6f99fd480fd81feec8120083a9ae","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":30}}},{"hash":"5bb12d45cb438a464f4a3a8fa9a3beb69e60d8df","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"Tang-Moyan":{"java":258,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":3}},"authorContributionVariance":{"Tang-Moyan":3955.76},"authorDisplayNameMap":{"Tang-Moyan":"CS2103T-W11-4 TANG..OYAN"}} +{"authorDailyContributionsMap":{"Tang-Moyan":[{"date":"2023-08-24","commitResults":[{"hash":"f88b6b32bb87fbb42eb9debc9cd5901b5b9f9f49","isMergeCommit":false,"messageTitle":"Level 0 Rename, Greet, Exit","messageBody":"","tags":["Level_0","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"fedfbdec231d900841404fa0a31d85ef5ddb4af9","isMergeCommit":false,"messageTitle":"Added Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"30a8d0f3cc16b11f4d136027c753f844b6efbdca","isMergeCommit":false,"messageTitle":"Added Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":36,"deletions":9}}},{"hash":"76e279d8d193b7f5cc5d9b588686e5212ea4ceab","isMergeCommit":false,"messageTitle":"Added Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":5}}},{"hash":"05bfd793eb631167cc6031dbfb6cab14fcff225f","isMergeCommit":false,"messageTitle":"Added Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":80,"deletions":4}}}]},{"date":"2023-09-01","commitResults":[{"hash":"95571afe30bf6968e33b2f5f00b7c4f4d8652969","isMergeCommit":false,"messageTitle":"Added UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"6b91d86451bb6f99fd480fd81feec8120083a9ae","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":30}}},{"hash":"5bb12d45cb438a464f4a3a8fa9a3beb69e60d8df","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":0}}}]},{"date":"2023-09-04","commitResults":[{"hash":"3df86789d8ddc522ef8c39ed5f4f739d499af501","isMergeCommit":false,"messageTitle":"Added Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":196,"deletions":10}}},{"hash":"e5419c65951f05ab07ea68d7026d31a095d69b55","isMergeCommit":false,"messageTitle":"Small changes","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"9cd2af309f398acaa9caff51f3555c7eea4419fc","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Tang-Moyan":{"java":448,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":3}},"authorContributionVariance":{"Tang-Moyan":5226.25},"authorDisplayNameMap":{"Tang-Moyan":"CS2103T-W11-4 TANG..OYAN"}} diff --git a/Vanessamae23_ip_master/authorship.json b/Vanessamae23_ip_master/authorship.json index 6dd4a296..6ae9f5c3 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":" storage.save(this.tasks);","lastModifiedDate":"2023-08-30"},{"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":"","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}}] diff --git a/Vanessamae23_ip_master/commits.json b/Vanessamae23_ip_master/commits.json index 5be2901f..e197bce9 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}}}]}]},"authorFileTypeContributionMap":{"Vanessamae23":{"java":990,"md":219,"fxml":51,"sh":0,"bat":2,"gradle":27,"txt":15}},"authorContributionVariance":{"Vanessamae23":47321.824},"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}}}]}]},"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"}} diff --git a/WangCheng0116_ip_master/authorship.json b/WangCheng0116_ip_master/authorship.json index b7b06dac..256772a2 100644 --- a/WangCheng0116_ip_master/authorship.json +++ b/WangCheng0116_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"# core.Duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"3. After that, locate the `src/main/java/core.Duke.java` file, right-click it, and choose `Run core.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WangCheng0116":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"WangCheng0116"},"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":"-"},"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":{"WangCheng0116":1,"-":42}},{"path":"src/main/java/commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddDeadlineCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddDeadlineCommand with the specified deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param task The deadline task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public AddDeadlineCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given deadline task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" tasks.add(task); // Add task to the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString()); // Update storage with the new task","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":36}},{"path":"src/main/java/commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddEventCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddEventCommand with the specified event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param task The event task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public AddEventCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given event task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" tasks.add(task); // Add task to the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString()); // Update storage with the new task","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":36}},{"path":"src/main/java/commands/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add a todo task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddTodoCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a todo command.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" public static final String TODO_PATTERN \u003d \"^(todo)\\\\s+.+\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddTodoCommand with the specified todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * @param task The todo task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public AddTodoCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given todo task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" tasks.add(task); // Add task to the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString()); // Update storage with the new task","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":41}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The interface representing a command that can be executed on the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public interface Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command on the given task list, user interface, and storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list on which the command will be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" void execute(TaskList tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":20}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public static final String DELETE_PATTERN \u003d \"^(delete)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DeleteCommand with the specified position of the task to delete.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public DeleteCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to delete the task at the specified position from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list from which the task will be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" tasks.delete(pos); // Delete task from the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":39}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to handle the application exit.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" ui.exit(); // Instruct the user interface to exit the application","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":23}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to find tasks containing a specified keyword in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" private static String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a FindCommand with the specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param keyword The keyword to search for in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" FindCommand.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" * Executes the find command on the provided task list, displaying tasks that match the keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list to search within.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage manager to handle data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" tasks.find(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":34}},{"path":"src/main/java/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to display help information and usage examples.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class HelpCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to display help information and usage examples to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display help messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"Sorry, I don\u0027t understand what do you mean.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"Here are some sample usages for your reference:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"1. Add a deadline to your list: deadline + (description) + (deadline)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"2. Add a todo task to your list: todo + (description)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"3. Add an event task to your list: event + (description) + from + \"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" + \"(startdate) + to + (enddate)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"4. Delete a task: delete + (line number)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"5. Mark a task: mark + (line number)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"6. Unmark a class: unmark + (line number)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"content in ( ) is for you to fill out\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":31}},{"path":"src/main/java/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to handle invalid user input by displaying an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class InvalidCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" private String errorMessage;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an InvalidCommand with the specified error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param errorMessage The error message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" public InvalidCommand(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" this.errorMessage \u003d errorMessage;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":26}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to display the list of tasks to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to display the list of tasks to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" tasks.print(); // Display the list of tasks through the user interface","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":23}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to mark a task as done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a MarkCommand with the specified position of the task to mark.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public MarkCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a mark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" public static final String MARK_PATTERN \u003d \"^(mark)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to mark the task at the specified position as done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * If the position is invalid, an error message is displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list in which the task will be marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" if (pos \u003e tasks.size() || pos \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(\"Invalid index. Please enter again.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" tasks.mark(pos); // Mark the task as done in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" Storage.refresh(tasks); // Update storage with the modified task list","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":45}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to unmark a task as not done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class UnmarkCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of an unmark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public static final String UNMARK_PATTERN \u003d \"^(unmark)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an UnmarkCommand with the specified position of the task to unmark.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public UnmarkCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to unmark the task at the specified position as not done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * If the position is invalid, an error message is displayed through the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list in which the task will be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display error messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" if (pos \u003e tasks.size() || pos \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(\"Invalid index. Please enter again.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" tasks.unmark(pos); // Unmark the task in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" Storage.refresh(tasks); // Update storage with the modified task list","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":45}},{"path":"src/main/java/core/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package core;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import parser.CommandParser;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * Duke is a task management application that interacts with users through a command-line interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * It allows users to manage tasks by adding, marking, and deleting tasks from a task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private static String filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Duke instance with the specified filepath for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * @param filepath The filepath for task storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public Duke(String filepath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" Duke.filepath \u003d filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" storage \u003d new Storage(filepath);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * Runs the Duke application, displaying a welcome message and handling user commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * The application continues running until the user inputs an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public static void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" if (fullCommand.equals(null)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" isExit \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" Command c \u003d CommandParser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" * The main method to start the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" * @param args Command-line arguments (not used in this application).","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"WangCheng0116":58,"-":4}},{"path":"src/main/java/parser/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddDeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddEventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddTodoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import commands.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"import commands.HelpCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"import commands.InvalidCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"import commands.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"import commands.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"import commands.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * The CommandParser is responsible for parsing input and generating the Command objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * It examines the input to determine the type of command and returns the appropriate instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"public class CommandParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" * Extracts the command keyword from the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @return The command keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" private static String extractCommand(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" String[] words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" if (words.length \u003e 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" return words[0].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" * Extracts the value (e.g., task position) from the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" * @return The extracted value.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" private static int extractValue(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" String[] parts \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" return Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" * Parses the user input and generates the appropriate Command instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" * @return The corresponding Command instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" String command \u003d extractCommand(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" TaskParser taskParser \u003d new TaskParser();","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" case \"mark\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" Matcher markMatcher \u003d Pattern.compile(MarkCommand.MARK_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" if (markMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" return new MarkCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid mark command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" case \"unmark\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" Matcher unmarkMatcher \u003d Pattern.compile(UnmarkCommand.UNMARK_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" if (unmarkMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" return new UnmarkCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid unmark command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" case \"delete\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" Matcher deleteMatcher \u003d Pattern.compile(DeleteCommand.DELETE_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" if (deleteMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" return new DeleteCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid delete command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" case \"find\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" String keyword \u003d input.substring(\"find\".length()).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" case \"event\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" return new AddEventCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" case \"todo\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":" return new AddTodoCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" case \"deadline\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":" return new AddDeadlineCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"WangCheng0116"},"content":" case \"bye\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"WangCheng0116"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"WangCheng0116"},"content":" case \"list\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"WangCheng0116"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"WangCheng0116"},"content":" default -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"WangCheng0116"},"content":" return new HelpCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":112}},{"path":"src/main/java/parser/DataParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * The DataParser is responsible for parsing data from storage","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * files and converting them into Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"public class DataParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line from a storage file and converts it into a corresponding Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @return A Task object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public static Task parseLineToTask(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" String typeIndicator \u003d line.substring(0, 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" switch (typeIndicator) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" case \"[D]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" return parseDeadline(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" case \"[E]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" return parseEvent(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" case \"[T]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" return parseToDo(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Please check the original file for correctness.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing a deadline task and converts it into a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" * @return A Deadline object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" public static Deadline parseDeadline(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d \"deadline\".length() + 1; // Length of \"deadline\" plus the space","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" int byIndex \u003d line.indexOf(\"by:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart, byIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" String date \u003d line.substring(byIndex + \"/by\".length()).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" return new Deadline(description, date, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing an event task and converts it into an Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" * @return An Event object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" public static Event parseEvent(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d line.indexOf(\"] \") + 2; // Index of the first character after \"] \"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" int startFromIndex \u003d line.indexOf(\"from \") + 6; // Index of the character after \"from: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" int toIndex \u003d line.indexOf(\"to \", startFromIndex); // Index of the character before \"to: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" int endFromIndex \u003d toIndex + 4; // Index of the character after \"to: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart, startFromIndex - 8).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" String start \u003d line.substring(startFromIndex, toIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" String end \u003d line.substring(endFromIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" return new Event(description, start, end, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing a todo task and converts it into a ToDo object.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" * @return A ToDo object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" public static ToDo parseToDo(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d line.indexOf(\"] \") + 2; // Index of the first character after \"] \"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" return new ToDo(description, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":88}},{"path":"src/main/java/parser/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * The TaskParser class is responsible for parsing user input","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * and generating Task objects based on different task types.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"public class TaskParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * Parses the input string and generates a Task object based on the specified task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string containing task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public Task parseTask(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" return parseDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" return parseEvent(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" return parseTodo(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" } catch (InvalidTaskFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"☹ OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" private Deadline parseDeadline(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" Pattern pattern \u003d Pattern.compile(\"deadline (.+) by: (.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" String taskDescription \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" String deadlineTime \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" return new Deadline(taskDescription, deadlineTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"Invalid deadline format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" private Event parseEvent(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" Pattern pattern \u003d Pattern.compile(\"event (.+) from (.+) to (.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" String eventDescription \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" String startTime \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" String endTime \u003d matcher.group(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" if (eventDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" return new Event(eventDescription, startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"Invalid event format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" private ToDo parseTodo(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" String taskDescription \u003d input.replace(\"todo\", \"\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" return new ToDo(taskDescription);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" * Custom exception class for representing an invalid task format.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" public static class InvalidTaskFormatException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" public InvalidTaskFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":96}},{"path":"src/main/java/storage/DataReader.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import parser.DataParser;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * The DataReader class is responsible for reading task data from a storage file and converting it into Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"public class DataReader {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private static String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DataReader instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param path The file path of the storage file to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public DataReader(String path) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" DataReader.path \u003d path;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Reads tasks from the storage file and converts them into an ArrayList of Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * @return An ArrayList of Task objects representing the tasks read from the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public static ArrayList\u003cTask\u003e readTasksFromFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" ArrayList\u003cTask\u003e tasksList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(DataReader.path))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d DataParser.parseLineToTask(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" tasksList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Error reading the file or the file doesn\u0027t exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Please try again after ensuring the correctness of the file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" System.exit(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" return tasksList;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":50}},{"path":"src/main/java/storage/DataWriter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * The DataWriter class is responsible for writing and updating task data in a storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"public class DataWriter {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private static String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DataWriter instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * @param filePath The file path of the storage file to be written to.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public DataWriter(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * Adds a new line of text to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line of text to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public static void addLine(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(DataWriter.filePath, true))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" writer.write(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" writer.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while adding the line: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a line from the storage file based on the line number.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" * @param lineNumber The line number to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" public static void deleteLine(int lineNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(DataWriter.filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" String currentLine;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" while ((currentLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" lines.add(currentLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while reading the file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" if (lineNumber \u003e\u003d 1 \u0026\u0026 lineNumber \u003c\u003d lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" lines.remove(lineNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" for (String line : lines) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" writer.write(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" writer.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while writing back to the file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Invalid line number.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" * Refreshes the content of the storage file with the tasks from the given TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The TaskList containing tasks to be written to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" public static void refresh(TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" // Clean the file by overwriting it with an empty content","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" BufferedWriter cleanWriter \u003d new BufferedWriter(new FileWriter(filePath, false));","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" cleanWriter.write(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" cleanWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" // Append tasks from the array list to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" BufferedWriter appendWriter \u003d new BufferedWriter(new FileWriter(filePath, true));","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" appendWriter.write(task.toString() + System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" appendWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"An error occurred: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":99}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * The Storage class provides methods to interact with","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * storage files for reading and writing task data.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private static String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" private DataReader dataReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private DataWriter dataWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param path The file path of the storage file to be read from and written to.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" Storage.path \u003d path;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.dataReader \u003d new DataReader(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" this.dataWriter \u003d new DataWriter(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * Adds a new line to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" public static void addLine(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.addLine(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a line from the storage file based on the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the line to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" public static void deleteLine(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.deleteLine(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" * Refreshes the storage file with the tasks from the given TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" * @param taskList The TaskList containing tasks to be written to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" public static void refresh(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.refresh(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" * Reads task data from a storage file and returns them as an ArrayList of Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" * @param fileName The name of the storage file to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" * @return An ArrayList of Task objects representing the tasks read from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" public static ArrayList\u003cTask\u003e readFileToTasksLists(String fileName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" return DataReader.readTasksFromFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":66}},{"path":"src/main/java/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasklist;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import storage.DataReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * The TaskList class manages a list of tasks, providing","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * methods to add, mark, unmark, delete, and print tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" private static ArrayList\u003cTask\u003e ls \u003d DataReader.readTasksFromFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * Adds a task to the list and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" if (task \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" ls.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Now you have \" + this.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * Marks a task as done and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public void mark(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" ls.get(pos - 1).toMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(ls.get(pos - 1).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" * Retrieves a task from the list at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" * @param i The index of the task to retrieve.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" public Task get(int i) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" return ls.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" * Unmarks a task as done and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" public void unmark(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" ls.get(pos - 1).toUnmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(ls.get(pos - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" return ls.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a task from the list and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" public void delete(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\" \" + ls.get(pos - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" ls.remove(pos - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" Storage.deleteLine(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Now you have \" + ls.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" * Prints the list of tasks in a formatted manner.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" public void print() {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c ls.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" int order \u003d i + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" Task cur \u003d ls.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(order + \". \" + \" \" + cur);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" * Searches for tasks in the task list that contain the","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":" * specified keyword and prints the matching tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"WangCheng0116"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"WangCheng0116"},"content":" public void find(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"WangCheng0116"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c ls.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d ls.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"WangCheng0116"},"content":" if (task.containKey(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"WangCheng0116"},"content":" counter++;","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(counter + \".\" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"WangCheng0116"},"content":" if (counter \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Sorry.No tasks match the keyword: \" + keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":117}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The Deadline class represents a task with a specific due date.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" protected String by;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedBy; // New field to store parsed LocalDate","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Deadline instance with the specified description and due date.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * @param by The due date of the task in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" parseBy();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Deadline instance with the specified description, due date, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @param by The due date of the task in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public Deadline(String description, String by, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" super(description, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" parseBy();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" * Parses the due date string into a LocalDate object using multiple date formats.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" private void parseBy() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter[] dateFormats \u003d {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\")","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" for (DateTimeFormatter dateFormat : dateFormats) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" parsedBy \u003d LocalDate.parse(by, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" parsedBy \u003d parsedBy;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" String dateString \u003d parsedBy !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" ? parsedBy.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" : by;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" return \"[D]\" + super.toString() + \" by: \" + dateString;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":72}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The Event class represents a task that occurs within a specific time range.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" protected String start;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" protected String end;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedStartDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedEndDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an Event instance with the specified description, start date, and end date.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param start The start date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param end The end date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" parseDates();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an Event instance with the specified description, start date, end date, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" * @param start The start date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" * @param end The end date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" public Event(String description, String start, String end, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" super(description, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" parseDates();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" * Parses the start and end date strings into LocalDate objects using multiple date formats.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" private void parseDates() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter[] dateFormats \u003d {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\")","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" for (DateTimeFormatter dateFormat : dateFormats) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" parsedStartDate \u003d LocalDate.parse(start, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" parsedEndDate \u003d LocalDate.parse(end, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" parsedStartDate \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" parsedEndDate \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" String startString \u003d parsedStartDate !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" ? parsedStartDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" : start;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" String endString \u003d parsedEndDate !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" ? parsedEndDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" : end;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" return \"[E]\" + super.toString() + \" from \" + startString + \" to \" + endString;","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":84}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":" * The Task class represents a basic task with a description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"public class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":" protected String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Task instance with the specified","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * description and sets the completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Task instance with the specified description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" public Task(String des, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" this.description \u003d des;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d mark;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * Returns an icon representing the completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" * @return The completion status icon (\"[X]\" for completed, \"[ ]\" for not completed).","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // mark done task with X","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" public void toMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" * Marks the task as not completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" public void toUnmark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" * Checks if the task\u0027s description contains the specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" * @param key The keyword to search for in the task\u0027s description.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" * @return True if the description contains the keyword, otherwise false.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" public boolean containKey(String key) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" return this.description.contains(key);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" return this.getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":74}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":" * The ToDo class represents a task that has no specific due date or time.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a ToDo instance with the specified description","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * and sets the completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" public ToDo(String des) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" super(des);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a ToDo instance with the specified description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public ToDo(String des, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" super(des, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":37}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":" * The Ui class handles interactions with the user, displaying messages and reading input.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" private static String botName \u003d \"cc\";","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Ui instance and initializes the scanner for reading user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Displays the welcome message upon starting the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Hello! I\u0027m \" + botName);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Displays the exit message before closing the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" public void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" System.out.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" System.exit(0);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" * Displays a given message.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" * Reads a command input from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" * @return The command input provided by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" * Displays an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":61}},{"path":"src/test/java/core/DukeTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package core;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import java.io.ByteArrayInputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * The DukeTest class contains JUnit test methods to test the behavior of the Duke class.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"public class DukeTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private final InputStream sysInBackup \u003d System.in;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * Sets up the streams to capture output for testing.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" @BeforeEach","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" public void setUpStreams() {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * Tests the behavior of the list command.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public void testListCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" ByteArrayInputStream in \u003d new ByteArrayInputStream(\"list\".getBytes());","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" System.setIn(in);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" String expectedOutput \u003d \"Here are the tasks in your list:\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" * Tests the behavior of the todo command.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" public void testTodoCommand() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" ByteArrayInputStream in \u003d new ByteArrayInputStream(\"todo hi\".getBytes());","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" System.setIn(in);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" String expectedOutput \u003d \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" \"[T][ ] hi\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" \"Now you have 1 tasks in the list.\\n\";","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" assertEquals(expectedOutput, outContent.toString());","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":57}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"WangCheng0116":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"java -classpath ..\\bin core.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WangCheng0116":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"# core.Duke project template","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. Open Intellij (if you are not in the welcome screen, click `File` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2021-01-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"3. After that, locate the `src/main/java/core.Duke.java` file, right-click it, and choose `Run core.Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WangCheng0116":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":" id \u0027org.openjfx.javafxplugin\u0027 version \u00270.0.13\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"javafx {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" version \u003d \u002717.0.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" modules \u003d [\u0027javafx.controls\u0027, \u0027javafx.fxml\u0027]","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":"mainClassName \u003d \u0027HelloFx\u0027","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":29,"-":41}},{"path":"src/main/java/commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add a deadline task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddDeadlineCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddDeadlineCommand with the specified deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param task The deadline task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public AddDeadlineCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given deadline task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":36}},{"path":"src/main/java/commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add an event task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddEventCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddEventCommand with the specified event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param task The event task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public AddEventCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given event task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" tasks.add(task); // Add task to the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString()); // Update storage with the new task","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":36}},{"path":"src/main/java/commands/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to add a todo task to the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"public class AddTodoCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a todo command.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" public static final String TODO_PATTERN \u003d \"^(todo)\\\\s+.+\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private Task task;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an AddTodoCommand with the specified todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * @param task The todo task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public AddTodoCommand(Task task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to add the given todo task to the task list and update storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list that the task will be added to.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update with the new task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" tasks.add(task); // Add task to the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" storage.addLine(task.toString()); // Update storage with the new task","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":41}},{"path":"src/main/java/commands/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The interface representing a command that can be executed on the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public interface Command {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command on the given task list, user interface, and storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list on which the command will be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" void execute(TaskList tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":20}},{"path":"src/main/java/commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to delete a task from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class DeleteCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a delete command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public static final String DELETE_PATTERN \u003d \"^(delete)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DeleteCommand with the specified position of the task to delete.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public DeleteCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to delete the task at the specified position from the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list from which the task will be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" tasks.delete(pos); // Delete task from the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":39}},{"path":"src/main/java/commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class ExitCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to exit the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to handle the application exit.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" ui.exit(); // Instruct the user interface to exit the application","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":23}},{"path":"src/main/java/commands/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to find tasks containing a specified keyword in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class FindCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" private static String keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a FindCommand with the specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param keyword The keyword to search for in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" FindCommand.keyword \u003d keyword;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" * Executes the find command on the provided task list, displaying tasks that match the keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list to search within.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface for displaying messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage manager to handle data storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" tasks.find(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":34}},{"path":"src/main/java/commands/HelpCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to display help information and usage examples.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class HelpCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to display help information and usage examples to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display help messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"Sorry, I don\u0027t understand what do you mean.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"Here are some sample usages for your reference:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"1. Add a deadline to your list: deadline + (description) + (deadline)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"2. Add a todo task to your list: todo + (description)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"3. Add an event task to your list: event + (description) + from + \"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" + \"(startdate) + to + (enddate)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"4. Delete a task: delete + (line number)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"5. Mark a task: mark + (line number)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"6. Unmark a class: unmark + (line number)\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" ui.showMessage(\"content in ( ) is for you to fill out\");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":31}},{"path":"src/main/java/commands/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to handle invalid user input by displaying an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class InvalidCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" private String errorMessage;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an InvalidCommand with the specified error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param errorMessage The error message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" public InvalidCommand(String errorMessage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" this.errorMessage \u003d errorMessage;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":26}},{"path":"src/main/java/commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to display the list of tasks to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class ListCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to display the list of tasks to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display the list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage (not used in this command).","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" tasks.print(); // Display the list of tasks through the user interface","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":23}},{"path":"src/main/java/commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to mark a task as done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class MarkCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of a mark command.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public static final String MARK_PATTERN \u003d \"^(mark)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a MarkCommand with the specified position of the task to mark.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public MarkCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to mark the task at the specified position as done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * If the position is invalid, an error message is displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list in which the task will be marked as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display messages to the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" if (pos \u003e tasks.size() || pos \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(\"Invalid index. Please enter again.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" tasks.mark(pos); // Mark the task as done in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" Storage.refresh(tasks); // Update storage with the modified task list","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":44}},{"path":"src/main/java/commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package commands;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * Represents a command to unmark a task as not done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class UnmarkCommand implements Command {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * The regular expression pattern for matching the format of an unmark command.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public static final String UNMARK_PATTERN \u003d \"^(unmark)\\\\s+\\\\d+$\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private int pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an UnmarkCommand with the specified position of the task to unmark.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public UnmarkCommand(int pos) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" this.pos \u003d pos;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Executes the command to unmark the task at the specified position as not done in the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * If the position is invalid, an error message is displayed through the user interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The task list in which the task will be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param ui The user interface to display error messages.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param storage The storage to update as needed by the command.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" if (pos \u003e tasks.size() || pos \u003c\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(\"Invalid index. Please enter again.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" tasks.unmark(pos); // Unmark the task in the task list","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" Storage.refresh(tasks); // Update storage with the modified task list","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":45}},{"path":"src/main/java/core/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package core;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import parser.CommandParser;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import ui.Ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * Duke is a task management application that interacts with users through a command-line interface.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * It allows users to manage tasks by adding, marking, and deleting tasks from a task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" private static Storage storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private static TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private static Ui ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private static String filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Duke instance with the specified filepath for storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * @param filepath The filepath for task storage.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public Duke(String filepath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" Duke.filepath \u003d filepath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" storage \u003d new Storage(filepath);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" taskList \u003d new TaskList();","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * Runs the Duke application, displaying a welcome message and handling user commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * The application continues running until the user inputs an exit command.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public static void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" ui.showWelcome();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" if (fullCommand.equals(null)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" isExit \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" Command c \u003d CommandParser.parse(fullCommand);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" c.execute(taskList, ui, storage);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" * The main method to start the Duke application.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" * @param args Command-line arguments (not used in this application).","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" new Duke(\"data/tasks.txt\").run();","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"WangCheng0116":58,"-":4}},{"path":"src/main/java/parser/CommandParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddDeadlineCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddEventCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import commands.AddTodoCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import commands.Command;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"import commands.DeleteCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"import commands.ExitCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"import commands.FindCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"import commands.HelpCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"import commands.InvalidCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"import commands.ListCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"import commands.MarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"import commands.UnmarkCommand;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * The CommandParser is responsible for parsing input and generating the Command objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * It examines the input to determine the type of command and returns the appropriate instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":"public class CommandParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" * Extracts the command keyword from the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * @return The command keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" private static String extractCommand(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" String[] words \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" if (words.length \u003e 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" return words[0].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" return \"\";","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" * Extracts the value (e.g., task position) from the input string.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" * @return The extracted value.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" private static int extractValue(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" String[] parts \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" return Integer.parseInt(parts[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" * Parses the user input and generates the appropriate Command instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" * @return The corresponding Command instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" public static Command parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" String command \u003d extractCommand(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" TaskParser taskParser \u003d new TaskParser();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" case \"mark\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" Matcher markMatcher \u003d Pattern.compile(MarkCommand.MARK_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" if (markMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" return new MarkCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid mark command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" case \"unmark\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" Matcher unmarkMatcher \u003d Pattern.compile(UnmarkCommand.UNMARK_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" if (unmarkMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" return new UnmarkCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid unmark command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" case \"delete\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" Matcher deleteMatcher \u003d Pattern.compile(DeleteCommand.DELETE_PATTERN).matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" if (deleteMatcher.matches()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" int pos \u003d extractValue(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" return new DeleteCommand(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" return new InvalidCommand(\"Invalid delete command format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" case \"find\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" String keyword \u003d input.substring(\"find\".length()).trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" return new FindCommand(keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" case \"event\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" return new AddEventCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":" case \"todo\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" return new AddTodoCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":" case \"deadline\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"WangCheng0116"},"content":" return new AddDeadlineCommand(taskParser.parseTask(input));","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"WangCheng0116"},"content":" case \"bye\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"WangCheng0116"},"content":" return new ExitCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"WangCheng0116"},"content":" case \"list\" -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"WangCheng0116"},"content":" return new ListCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"WangCheng0116"},"content":" default -\u003e {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"WangCheng0116"},"content":" return new HelpCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"WangCheng0116":113}},{"path":"src/main/java/parser/DataParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * The DataParser is responsible for parsing data from storage","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * files and converting them into Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"public class DataParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line from a storage file and converts it into a corresponding Task object.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * @return A Task object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" public static Task parseLineToTask(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" String typeIndicator \u003d line.substring(0, 3);","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" switch (typeIndicator) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" case \"[D]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" return parseDeadline(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" case \"[E]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" return parseEvent(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" case \"[T]\":","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" return parseToDo(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" default:","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Please check the original file for correctness.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing a deadline task and converts it into a Deadline object.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" * @return A Deadline object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" public static Deadline parseDeadline(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d \"deadline\".length() + 1; // Length of \"deadline\" plus the space","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" int byIndex \u003d line.indexOf(\"by:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart, byIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" String date \u003d line.substring(byIndex + \"/by\".length()).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" return new Deadline(description, date, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing an event task and converts it into an Event object.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" * @return An Event object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" public static Event parseEvent(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d line.indexOf(\"] \") + 2; // Index of the first character after \"] \"","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" int startFromIndex \u003d line.indexOf(\"from \") + 6; // Index of the character after \"from: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" int toIndex \u003d line.indexOf(\"to \", startFromIndex); // Index of the character before \"to: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" int endFromIndex \u003d toIndex + 4; // Index of the character after \"to: \"","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart, startFromIndex - 8).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" String start \u003d line.substring(startFromIndex, toIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" String end \u003d line.substring(endFromIndex).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" return new Event(description, start, end, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" * Parses a line representing a todo task and converts it into a ToDo object.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line representing the todo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" * @return A ToDo object corresponding to the parsed line.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" public static ToDo parseToDo(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" int descriptionStart \u003d line.indexOf(\"] \") + 2; // Index of the first character after \"] \"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" String description \u003d line.substring(descriptionStart).trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" boolean isMarked \u003d line.charAt(4) \u003d\u003d \u0027X\u0027; // Assuming index 4 corresponds to the \"[ ]\" checkmark","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" return new ToDo(description, isMarked);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":88}},{"path":"src/main/java/parser/TaskParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Deadline;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Event;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * The TaskParser class is responsible for parsing user input","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * and generating Task objects based on different task types.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"public class TaskParser {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * Parses the input string and generates a Task object based on the specified task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * @param input The input string containing task information.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @return A Task object representing the parsed task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public Task parseTask(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" if (input.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" return parseDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" } else if (input.startsWith(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" return parseEvent(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" } else if (input.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" return parseTodo(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" } catch (InvalidTaskFormatException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"☹ OOPS!!! \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" return null;","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" private Deadline parseDeadline(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" Pattern pattern \u003d Pattern.compile(\"deadline (.+) by: (.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" String taskDescription \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" String deadlineTime \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" return new Deadline(taskDescription, deadlineTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"Invalid deadline format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" private Event parseEvent(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" Pattern pattern \u003d Pattern.compile(\"event (.+) from (.+) to (.+)\");","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" Matcher matcher \u003d pattern.matcher(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" if (matcher.find()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" String eventDescription \u003d matcher.group(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" String startTime \u003d matcher.group(2);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" String endTime \u003d matcher.group(3);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" if (eventDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" return new Event(eventDescription, startTime, endTime);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"Invalid event format.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" private ToDo parseTodo(String input) throws InvalidTaskFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" String taskDescription \u003d input.replace(\"todo\", \"\").trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" if (taskDescription.isEmpty()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" throw new InvalidTaskFormatException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" return new ToDo(taskDescription);","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" * Custom exception class for representing an invalid task format.","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" public static class InvalidTaskFormatException extends Exception {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" public InvalidTaskFormatException(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" super(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":96}},{"path":"src/main/java/storage/DataReader.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import parser.DataParser;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * The DataReader class is responsible for reading task data from a storage file and converting it into Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"public class DataReader {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" private static String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DataReader instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param path The file path of the storage file to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" public DataReader(String path) {","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" DataReader.path \u003d path;","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Reads tasks from the storage file and converts them into an ArrayList of Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * @return An ArrayList of Task objects representing the tasks read from the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" public static ArrayList\u003cTask\u003e readTasksFromFile() {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" ArrayList\u003cTask\u003e tasksList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(DataReader.path))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" String line;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d DataParser.parseLineToTask(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" tasksList.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Error reading the file or the file doesn\u0027t exist.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Please try again after ensuring the correctness of the file.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" System.exit(1);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" return tasksList;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":49}},{"path":"src/main/java/storage/DataWriter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"import java.util.List;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" * The DataWriter class is responsible for writing and updating task data in a storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"public class DataWriter {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" private static String filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a DataWriter instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" * @param filePath The file path of the storage file to be written to.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" public DataWriter(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.filePath \u003d filePath;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * Adds a new line of text to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line of text to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public static void addLine(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(DataWriter.filePath, true))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" writer.write(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" writer.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while adding the line: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a line from the storage file based on the line number.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" * @param lineNumber The line number to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" public static void deleteLine(int lineNumber) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" List\u003cString\u003e lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(DataWriter.filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" String currentLine;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" while ((currentLine \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" lines.add(currentLine);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while reading the file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" if (lineNumber \u003e\u003d 1 \u0026\u0026 lineNumber \u003c\u003d lines.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" lines.remove(lineNumber - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(filePath))) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" for (String line : lines) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" writer.write(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" writer.newLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" System.err.println(\"An error occurred while writing back to the file: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Invalid line number.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" * Refreshes the content of the storage file with the tasks from the given TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" * @param tasks The TaskList containing tasks to be written to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" public static void refresh(TaskList tasks) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" // Clean the file by overwriting it with an empty content","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":" BufferedWriter cleanWriter \u003d new BufferedWriter(new FileWriter(filePath, false));","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" cleanWriter.write(\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" cleanWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" // Append tasks from the array list to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" BufferedWriter appendWriter \u003d new BufferedWriter(new FileWriter(filePath, true));","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d tasks.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" appendWriter.write(task.toString() + System.lineSeparator());","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" appendWriter.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"An error occurred: \" + e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":99}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import tasklist.TaskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * The Storage class provides methods to interact with","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * storage files for reading and writing task data.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" private static String path;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" private DataReader dataReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" private DataWriter dataWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Storage instance with the specified file path.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param path The file path of the storage file to be read from and written to.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public Storage(String path) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" Storage.path \u003d path;","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.dataReader \u003d new DataReader(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" this.dataWriter \u003d new DataWriter(path);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * Adds a new line to the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * @param line The line to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" public static void addLine(String line) {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.addLine(line);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a line from the storage file based on the specified position.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the line to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" public static void deleteLine(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.deleteLine(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" * Refreshes the storage file with the tasks from the given TaskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" * @param taskList The TaskList containing tasks to be written to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" public static void refresh(TaskList taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" DataWriter.refresh(taskList);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" * Reads task data from a storage file and returns them as an ArrayList of Task objects.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" * @param fileName The name of the storage file to be read.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" * @return An ArrayList of Task objects representing the tasks read from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" public static ArrayList\u003cTask\u003e readFileToTasksLists(String fileName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" return DataReader.readTasksFromFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":66}},{"path":"src/main/java/tasklist/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasklist;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import storage.DataReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import storage.Storage;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import tasks.Task;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * The TaskList class manages a list of tasks, providing","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * methods to add, mark, unmark, delete, and print tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" private static ArrayList\u003cTask\u003e ls \u003d DataReader.readTasksFromFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" * Adds a task to the list and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" if (task \u003d\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" return;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" ls.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Now you have \" + this.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * Marks a task as done and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" public void mark(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" ls.get(pos - 1).toMark();","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(ls.get(pos - 1).toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" * Retrieves a task from the list at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" * @param i The index of the task to retrieve.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" * @return The task at the specified index.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" public Task get(int i) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" return ls.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" * Unmarks a task as done and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" public void unmark(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" ls.get(pos - 1).toUnmark();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(ls.get(pos - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" * Returns the number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" * @return The number of tasks in the list.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" public int size() {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" return ls.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" * Deletes a task from the list and updates the storage file.","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" * @param pos The position of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":" public void delete(int pos) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\" \" + ls.get(pos - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" ls.remove(pos - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":" Storage.deleteLine(pos);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Now you have \" + ls.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"WangCheng0116"},"content":" * Prints the list of tasks in a formatted manner.","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"WangCheng0116"},"content":" public void print() {","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c ls.size(); i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"WangCheng0116"},"content":" int order \u003d i + 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"WangCheng0116"},"content":" Task cur \u003d ls.get(i);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(order + \". \" + \" \" + cur);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"WangCheng0116"},"content":" * Searches for tasks in the task list that contain the","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"WangCheng0116"},"content":" * specified keyword and prints the matching tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"WangCheng0116"},"content":" * @param keyword The keyword to search for in task descriptions.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"WangCheng0116"},"content":" public void find(String keyword) {","lastModifiedDate":"2023-08-31"},{"lineNumber":104,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-31"},{"lineNumber":105,"author":{"gitId":"WangCheng0116"},"content":" int counter \u003d 0;","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"WangCheng0116"},"content":" for (int i \u003d 0; i \u003c ls.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":107,"author":{"gitId":"WangCheng0116"},"content":" Task task \u003d ls.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"WangCheng0116"},"content":" if (task.containKey(keyword)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"WangCheng0116"},"content":" counter++;","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(counter + \".\" + task);","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"WangCheng0116"},"content":" if (counter \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Sorry.No tasks match the keyword: \" + keyword);","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":117}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The Deadline class represents a task with a specific due date.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" protected String by;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedBy; // New field to store parsed LocalDate","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Deadline instance with the specified description and due date.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * @param by The due date of the task in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" parseBy();","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Deadline instance with the specified description, due date, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @param by The due date of the task in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public Deadline(String description, String by, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" super(description, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" parseBy();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" * Parses the due date string into a LocalDate object using multiple date formats.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" private void parseBy() {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter[] dateFormats \u003d {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\")","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" for (DateTimeFormatter dateFormat : dateFormats) {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" parsedBy \u003d LocalDate.parse(by, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" parsedBy \u003d parsedBy;","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Deadline task.","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" String dateString \u003d parsedBy !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" ? parsedBy.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" : by;","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" return \"[D]\" + super.toString() + \" by: \" + dateString;","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":72}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" * The Event class represents a task that occurs within a specific time range.","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" protected String start;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" protected String end;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedStartDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" protected LocalDate parsedEndDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an Event instance with the specified description, start date, and end date.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param start The start date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param end The end date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public Event(String description, String start, String end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" super(description);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" parseDates();","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" * Constructs an Event instance with the specified description, start date, end date, and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" * @param start The start date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" * @param end The end date of the event in string format.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the event.","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" public Event(String description, String start, String end, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" super(description, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" parseDates();","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" * Parses the start and end date strings into LocalDate objects using multiple date formats.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" private void parseDates() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter[] dateFormats \u003d {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\")","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" };","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" for (DateTimeFormatter dateFormat : dateFormats) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" parsedStartDate \u003d LocalDate.parse(start, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" parsedEndDate \u003d LocalDate.parse(end, dateFormat);","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" parsedStartDate \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" parsedEndDate \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Event task.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":" String startString \u003d parsedStartDate !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"WangCheng0116"},"content":" ? parsedStartDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"WangCheng0116"},"content":" : start;","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"WangCheng0116"},"content":" String endString \u003d parsedEndDate !\u003d null","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"WangCheng0116"},"content":" ? parsedEndDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"WangCheng0116"},"content":" : end;","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"WangCheng0116"},"content":" return \"[E]\" + super.toString() + \" from \" + startString + \" to \" + endString;","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":84}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":" * The Task class represents a basic task with a description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"public class Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":" protected String description;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Task instance with the specified","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * description and sets the completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Task instance with the specified description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" public Task(String des, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" this.description \u003d des;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d mark;","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" * Returns an icon representing the completion status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" * @return The completion status icon (\"[X]\" for completed, \"[ ]\" for not completed).","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" return (isDone ? \"[X]\" : \"[ ]\"); // mark done task with X","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" * Marks the task as completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" public void toMark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" * Marks the task as not completed.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" public void toUnmark() {","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" * Checks if the task\u0027s description contains the specified keyword.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" * @param key The keyword to search for in the task\u0027s description.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" * @return True if the description contains the keyword, otherwise false.","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":" public boolean containKey(String key) {","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"WangCheng0116"},"content":" return this.description.contains(key);","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the Task.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"WangCheng0116"},"content":" return this.getStatusIcon() + \" \" + description;","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":74}},{"path":"src/main/java/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package tasks;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":" * The ToDo class represents a task that has no specific due date or time.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a ToDo instance with the specified description","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" * and sets the completion status to false.","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" public ToDo(String des) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" super(des);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a ToDo instance with the specified description and completion status.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" * @param des The description of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" * @param mark The completion status of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" public ToDo(String des, boolean mark) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" super(des, mark);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" * Returns the string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" * @return The formatted string representation of the ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":" public String toString() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":37}},{"path":"src/main/java/ui/HelloFx.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import javafx.application.Application;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.Scene;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"import javafx.scene.layout.StackPane;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"public class HelloFx extends Application {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" public void start(Stage stage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" String javaVersion \u003d System.getProperty(\"java.version\");","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" String javafxVersion \u003d System.getProperty(\"javafx.version\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" Label l \u003d new Label(\"Hello, JavaFX \" + javafxVersion + \", running on Java \" + javaVersion + \".\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" Scene scene \u003d new Scene(new StackPane(l), 640, 480);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" stage.setScene(scene);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" stage.show();","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" launch();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":25}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":" * The Ui class handles interactions with the user, displaying messages and reading input.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":" private static String botName \u003d \"cc\";","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":" private Scanner scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" * Constructs a Ui instance and initializes the scanner for reading user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public Ui() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"WangCheng0116"},"content":" * Displays the welcome message upon starting the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"WangCheng0116"},"content":" public void showWelcome() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"Hello! I\u0027m \" + botName);","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"WangCheng0116"},"content":" * Displays the exit message before closing the application.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"WangCheng0116"},"content":" public void exit() {","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"WangCheng0116"},"content":" System.out.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"WangCheng0116"},"content":" System.exit(0);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"WangCheng0116"},"content":" * Displays a given message.","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"WangCheng0116"},"content":" * @param message The message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"WangCheng0116"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"WangCheng0116"},"content":" * Reads a command input from the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"WangCheng0116"},"content":" * @return The command input provided by the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"WangCheng0116"},"content":" public String readCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"WangCheng0116"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"WangCheng0116"},"content":" * Displays an error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"WangCheng0116"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"WangCheng0116"},"content":" * @param message The error message to be displayed.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"WangCheng0116"},"content":" public void showError(String message) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"WangCheng0116"},"content":" System.out.println(message);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"WangCheng0116":61}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"import tasks.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":" * Checks if toString method returns string with correct format.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"WangCheng0116"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"WangCheng0116"},"content":" @Test","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"WangCheng0116"},"content":" public void toString_correctFormat() {","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"WangCheng0116"},"content":" ToDo toDo \u003d new ToDo(\"abc\");","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"WangCheng0116"},"content":" assertEquals(\"[T][ ] abc\", toDo.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"WangCheng0116"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"WangCheng0116":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WangCheng0116"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"WangCheng0116"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"WangCheng0116"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"WangCheng0116"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"WangCheng0116"},"content":"mark 1","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"WangCheng0116"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"WangCheng0116"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"WangCheng0116"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"WangCheng0116"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"WangCheng0116"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"WangCheng0116":12}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"WangCheng0116"},"content":"java -classpath ..\\bin core.Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WangCheng0116":1,"-":20}}] diff --git a/WangCheng0116_ip_master/commits.json b/WangCheng0116_ip_master/commits.json index eca2fb71..69a52dd5 100644 --- a/WangCheng0116_ip_master/commits.json +++ b/WangCheng0116_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"WangCheng0116":[{"date":"2023-08-23","commitResults":[{"hash":"29929c8c2cd4fe5fce65e8c2226f83393e7f32ad","isMergeCommit":false,"messageTitle":"Rename bot and initialize skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d1a7c850417c337bc3fba601f4030b84311d8531","isMergeCommit":false,"messageTitle":"implement echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"d6d853ff42e6891e39abffc841436745b9ff8779","isMergeCommit":false,"messageTitle":"Implement add and list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"7cfd8c01187fee58b4b73ef5edc880f61d1314bd","isMergeCommit":false,"messageTitle":"Implement mark as done function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":14}}},{"hash":"7f390ddc4bf490af727162977d652451fe22c522","isMergeCommit":false,"messageTitle":"creating subclasses of task, consisting of todo, deadline and event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":38}}},{"hash":"1a2e8747c5e51b14d7046c32eb50d8ab2a670a47","isMergeCommit":false,"messageTitle":"creating TaskParser class and implement function of adding different kinds of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":2}}},{"hash":"06d913270d455c8cd9edfd836f52e484d150745e","isMergeCommit":false,"messageTitle":"finish A-TextUiTesting by creating input.txt and EXPECTED.txt","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"073091f1e11bd4b9f3485796c592a0a1d3d2fd1d","isMergeCommit":false,"messageTitle":"creating own InvalidTaskFormatException and hence handle invalid input cases","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":14}}},{"hash":"5a50ed3facc80cac06a685ee0d42b599d883f8c7","isMergeCommit":false,"messageTitle":"implement deleting action","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"58036d46bc81bcc96d8d0450bc5431b5e93bc311","isMergeCommit":false,"messageTitle":"expand test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f684418362d29facf2c5bd763feb0ab184eb8332","isMergeCommit":false,"messageTitle":"Implement TaskReader","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":3}}},{"hash":"64b93c13576a8b2c86fa1be2214fb8b86c6189bf","isMergeCommit":false,"messageTitle":"Implement TaskWriter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":10}}},{"hash":"5e0bbc29dc26f6b829e1a58a8d2e5df8e5e0df39","isMergeCommit":false,"messageTitle":"Handle non-existent file case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"3c52325ba7b4853b2c7d71e2716aca56a15c2eac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"5dede6d62ef8f2dcb9094bf44360a58178f2ce3c","isMergeCommit":false,"messageTitle":"Implement reading date feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":20}}},{"hash":"2fb68bd0bf27687720129a9430194c921a828ac7","isMergeCommit":false,"messageTitle":"Create corresponding packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":9},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3eb4a90416551f8837afbc99659a1bab98d089e7","isMergeCommit":false,"messageTitle":"Implement prototypes of different commands and parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":217,"deletions":18}}},{"hash":"17e9f9a402a34a1fe0b44e3aa97f31ccac912447","isMergeCommit":false,"messageTitle":"Implement DataParser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":128,"deletions":25}}},{"hash":"446b056f5804d39759e65ad69dc98ad12a9587b7","isMergeCommit":false,"messageTitle":"Implement Storage class and Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":10}}},{"hash":"291e9100c2bef54f5e6829184831b6fbe45ef772","isMergeCommit":false,"messageTitle":"Connect each component with main logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":168}}},{"hash":"9aa3fd49057abb9c53637ca4016a9a7965c280f4","isMergeCommit":false,"messageTitle":"Fix all Java coding standard issues","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":689,"deletions":713}}},{"hash":"fc0038a818cefab47c0688d01454a727bd6431b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/WangCheng0116/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7640bb30924d54bd177caa068e49282ba661da3d","isMergeCommit":false,"messageTitle":"Fix bugs found when deleting tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":12}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a3c8ab4c78693653e10bf22aea9d79ca38ce0278","isMergeCommit":false,"messageTitle":"Add two Junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":52,"deletions":2}}},{"hash":"ce86b18c34c0c6c791fa0a285d1bc36ff5bfcfde","isMergeCommit":false,"messageTitle":"Fix coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":213}}},{"hash":"f7f861c58dba5cc66379351cba99c934a0f54010","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027 into A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6bd64e948afc163757c4495b25b3b7ad6a280ab3","isMergeCommit":false,"messageTitle":"Provide JavaDoc for classes in package command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":26}}},{"hash":"028e7279a2d7f0fda27427139ca4980c4b5d5f79","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes in package core, parser and storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":19}}},{"hash":"0bed88959367506971c7554d4a676ce2163b8a08","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes within packages tasklist, tasks, ui and test","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":181,"deletions":6}}},{"hash":"87475136a7e29b6c8fb3382f65d001fc3d9140d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JavaDoc\u0027 into Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7a055f36d67cfddf94e9ce00945bd050d25bcebe","isMergeCommit":false,"messageTitle":"Implement finding feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":15}}},{"hash":"6bab6f9775a98551e9836da3f34bf1b70b951f97","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8868b40ca34918ac2b58a4bc6885304996f38ba5","isMergeCommit":false,"messageTitle":"Fix indentation issues","messageBody":"","tags":["branch-level-8","A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1018,"deletions":1010}}}]}]},"authorFileTypeContributionMap":{"WangCheng0116":{"java":1470,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":12}},"authorContributionVariance":{"WangCheng0116":1019034.0},"authorDisplayNameMap":{"WangCheng0116":"CS2103T-T11-4 WANG..HENG"}} +{"authorDailyContributionsMap":{"WangCheng0116":[{"date":"2023-08-23","commitResults":[{"hash":"29929c8c2cd4fe5fce65e8c2226f83393e7f32ad","isMergeCommit":false,"messageTitle":"Rename bot and initialize skeleton","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":6}}}]},{"date":"2023-08-24","commitResults":[{"hash":"d1a7c850417c337bc3fba601f4030b84311d8531","isMergeCommit":false,"messageTitle":"implement echo function","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":0}}},{"hash":"d6d853ff42e6891e39abffc841436745b9ff8779","isMergeCommit":false,"messageTitle":"Implement add and list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"7cfd8c01187fee58b4b73ef5edc880f61d1314bd","isMergeCommit":false,"messageTitle":"Implement mark as done function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":14}}},{"hash":"7f390ddc4bf490af727162977d652451fe22c522","isMergeCommit":false,"messageTitle":"creating subclasses of task, consisting of todo, deadline and event","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":38}}},{"hash":"1a2e8747c5e51b14d7046c32eb50d8ab2a670a47","isMergeCommit":false,"messageTitle":"creating TaskParser class and implement function of adding different kinds of tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":2}}},{"hash":"06d913270d455c8cd9edfd836f52e484d150745e","isMergeCommit":false,"messageTitle":"finish A-TextUiTesting by creating input.txt and EXPECTED.txt","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0},"java":{"insertions":2,"deletions":2}}},{"hash":"073091f1e11bd4b9f3485796c592a0a1d3d2fd1d","isMergeCommit":false,"messageTitle":"creating own InvalidTaskFormatException and hence handle invalid input cases","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":44,"deletions":14}}},{"hash":"5a50ed3facc80cac06a685ee0d42b599d883f8c7","isMergeCommit":false,"messageTitle":"implement deleting action","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"58036d46bc81bcc96d8d0450bc5431b5e93bc311","isMergeCommit":false,"messageTitle":"expand test cases","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"f684418362d29facf2c5bd763feb0ab184eb8332","isMergeCommit":false,"messageTitle":"Implement TaskReader","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":106,"deletions":3}}},{"hash":"64b93c13576a8b2c86fa1be2214fb8b86c6189bf","isMergeCommit":false,"messageTitle":"Implement TaskWriter","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":10}}},{"hash":"5e0bbc29dc26f6b829e1a58a8d2e5df8e5e0df39","isMergeCommit":false,"messageTitle":"Handle non-existent file case","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":2}}},{"hash":"3c52325ba7b4853b2c7d71e2716aca56a15c2eac","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"5dede6d62ef8f2dcb9094bf44360a58178f2ce3c","isMergeCommit":false,"messageTitle":"Implement reading date feature","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":20}}},{"hash":"2fb68bd0bf27687720129a9430194c921a828ac7","isMergeCommit":false,"messageTitle":"Create corresponding packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":110,"deletions":9},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3eb4a90416551f8837afbc99659a1bab98d089e7","isMergeCommit":false,"messageTitle":"Implement prototypes of different commands and parser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":217,"deletions":18}}},{"hash":"17e9f9a402a34a1fe0b44e3aa97f31ccac912447","isMergeCommit":false,"messageTitle":"Implement DataParser","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":128,"deletions":25}}},{"hash":"446b056f5804d39759e65ad69dc98ad12a9587b7","isMergeCommit":false,"messageTitle":"Implement Storage class and Ui class","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":10}}},{"hash":"291e9100c2bef54f5e6829184831b6fbe45ef772","isMergeCommit":false,"messageTitle":"Connect each component with main logic","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":166,"deletions":168}}},{"hash":"9aa3fd49057abb9c53637ca4016a9a7965c280f4","isMergeCommit":false,"messageTitle":"Fix all Java coding standard issues","messageBody":"","tags":["A-Packages","A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":689,"deletions":713}}},{"hash":"fc0038a818cefab47c0688d01454a727bd6431b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/WangCheng0116/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"7640bb30924d54bd177caa068e49282ba661da3d","isMergeCommit":false,"messageTitle":"Fix bugs found when deleting tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":12}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a3c8ab4c78693653e10bf22aea9d79ca38ce0278","isMergeCommit":false,"messageTitle":"Add two Junit tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0},"java":{"insertions":52,"deletions":2}}},{"hash":"ce86b18c34c0c6c791fa0a285d1bc36ff5bfcfde","isMergeCommit":false,"messageTitle":"Fix coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":214,"deletions":213}}},{"hash":"f7f861c58dba5cc66379351cba99c934a0f54010","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CodingStandard\u0027 into A-JavaDoc","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6bd64e948afc163757c4495b25b3b7ad6a280ab3","isMergeCommit":false,"messageTitle":"Provide JavaDoc for classes in package command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":187,"deletions":26}}},{"hash":"028e7279a2d7f0fda27427139ca4980c4b5d5f79","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes in package core, parser and storage","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":19}}},{"hash":"0bed88959367506971c7554d4a676ce2163b8a08","isMergeCommit":false,"messageTitle":"Add JavaDoc to classes within packages tasklist, tasks, ui and test","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":181,"deletions":6}}},{"hash":"87475136a7e29b6c8fb3382f65d001fc3d9140d0","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JavaDoc\u0027 into Level-9","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7a055f36d67cfddf94e9ce00945bd050d25bcebe","isMergeCommit":false,"messageTitle":"Implement finding feature","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":88,"deletions":15}}},{"hash":"6bab6f9775a98551e9836da3f34bf1b70b951f97","isMergeCommit":true,"messageTitle":"Merge branch \u0027Level-9\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8868b40ca34918ac2b58a4bc6885304996f38ba5","isMergeCommit":false,"messageTitle":"Fix indentation issues","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":1018,"deletions":1010}}}]},{"date":"2023-09-02","commitResults":[{"hash":"70839c590aef762882a14f79d8ac47110408d1fd","isMergeCommit":false,"messageTitle":"Faking branch for auto-grader","messageBody":"","tags":["branch-level-8"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]},{"date":"2023-09-04","commitResults":[{"hash":"1211640cbd8785a372a16598aded1470d5970ea9","isMergeCommit":false,"messageTitle":"Configure checkstyle file and fix checkstyle problems","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":81,"deletions":81}}},{"hash":"c50db4a11190d8038f8be3db07e51ad23fb7a950","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-CheckStyle\u0027","messageBody":"","tags":["A-CheckStyle"],"fileTypesAndContributionMap":{}},{"hash":"39eb30a7bf5eca3313a40b9f3bbcac22c12491e7","isMergeCommit":true,"messageTitle":"Merge tag \u0027branch-level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6298e8d85a4857f3c099c425badeabd65ca478ae","isMergeCommit":false,"messageTitle":"Fix gradle issues","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":13,"deletions":3},"java":{"insertions":19,"deletions":57}}},{"hash":"d0a40f38b1d9e3b7a572b6d97ead2632578ff553","isMergeCommit":false,"messageTitle":"Configure JavaFX and implement a sample usage","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":17,"deletions":0},"java":{"insertions":25,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"WangCheng0116":{"java":1456,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":29,"txt":12}},"authorContributionVariance":{"WangCheng0116":819721.44},"authorDisplayNameMap":{"WangCheng0116":"CS2103T-T11-4 WANG..HENG"}} diff --git a/ZD292_ip_master/authorship.json b/ZD292_ip_master/authorship.json index e68c011e..cfc9e42b 100644 --- a/ZD292_ip_master/authorship.json +++ b/ZD292_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Chatbot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"public class Chatbot {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\tprivate String name;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tChatbot(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t\tthis.name \u003d name;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\tpublic void greet() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t\tString greeting \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Hello! I\u0027m %s\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"What can I do for you?\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\", this.name);","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(greeting);","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\tpublic void run() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t\tScanner newScan \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\tArrayList\u003cTask\u003e l1 \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t\twhile (newScan.hasNextLine()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t\t\t// outer try loop to validate Scanner input","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\t\ttry {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\t\t\tString action \u003d newScan.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\t\t\tString[] words \u003d action.split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\t\t\tString Event \u003d words[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t\t\tif (words.length \u003d\u003d 1 \u0026\u0026 !Event.equals(\"list\") \u0026\u0026 !Event.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tthrow new DukeException(\"Invalid input\");","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\t\t\tif (Event.equals(\"unmark\") || Event.equals(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint idx \u003d Integer.parseInt(words[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (idx + 1 \u003e l1.size()) {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"trying to mark or unmark something beyond the list\");","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tTask t \u003d l1.get(idx);","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (Event.equals(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tt.markAsDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\t\"Nice! I\u0027ve marked this task as done:\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\tt.toString() + \"\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\t\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tSystem.out.println(echo);","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t} else {","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tl1.get(idx).unMark();","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\t\"Nice! I\u0027ve marked this task as not done yet:\\n\" +","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\tt.toString() + \"\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\t\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tSystem.out.println(echo);","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} else if (action.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t// exit","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString echo \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\"Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\"____________________________________________________________\";","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(echo);","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.exit(0);","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} else if (Event.equals(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint len \u003d l1.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] delete \u003d action.split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (delete.length !\u003d 2) {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Invalid delete args\");","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t// check for exceptions as well","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tTask t \u003d l1.get(Integer.parseInt(delete[1]));","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString remaining \u003d Integer.toString(l1.size() - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tl1.remove(Integer.parseInt(delete[1]));","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString echo \u003d String.format(\" ____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\"Noted. I\u0027ve removed this task:\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\"%s\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\"Now you have %s tasks in the list.\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\"____________________________________________________________\", t.toString(), remaining);","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(echo);","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} else if (Event.equals(\"todo\") || Event.equals(\"deadline\") || Event.equals(\"event\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t// add to task to list then print list if event is list","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t// String[] slice \u003d Arrays.copyOfRange(items, 1, items.length - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] items \u003d action.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] first \u003d items[0].split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] describe \u003d Arrays.copyOfRange(first, 1, first.length);","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString description \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tfor (String d : describe) {","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription \u003d description + d + \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (Event.equals(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (first.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"enter todo like this, todo description\");","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tl1.add(new ToDos(description));","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t} else if (Event.equals(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] byCheck \u003d items[1].split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (items.length !\u003d 2 || !byCheck[0].equals(\"by\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"enter deadline like this, deadline description /by:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] start \u003d items[1].split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString newStart \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tfor (String s : Arrays.copyOfRange(start, 1, start.length)) {","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tnewStart \u003d newStart + s + \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tnewStart \u003d newStart.trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tl1.add(new Deadlines(description, newStart));","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t} else {","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] startCheck \u003d items[1].split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] endCheck \u003d items[2].split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (items.length !\u003d 3 || !endCheck[0].equals(\"to\") || !startCheck[0].equals(\"from\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"enter event properly, event description /from /to\");","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] start \u003d items[1].split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString newStart \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tfor (String s : Arrays.copyOfRange(start, 1, start.length)) {","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tnewStart \u003d newStart + s + \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tnewStart \u003d newStart.trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] end \u003d items[2].split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString newEnd \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tfor (String s : Arrays.copyOfRange(end, 1, end.length)) {","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tnewEnd \u003d newEnd + s + \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tnewEnd \u003d newEnd.trim();","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tl1.add(new Events(Event, newStart, newEnd));","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tTask t \u003d l1.get(l1.size() - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\"%s\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\"Now you have %s tasks in the list\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\"____________________________________________________________\", t.toString(), l1.size());","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(echo);","lastModifiedDate":"2023-08-24"},{"lineNumber":134,"author":{"gitId":"ZD292"},"content":"\t\t\t} else if (Event.equals(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"ZD292"},"content":"\t\t\t\tString lst \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"ZD292"},"content":"\t\t\t\tfor (int i \u003d 0; i \u003c l1.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint idx \u003d i + 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":138,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tlst +\u003d idx + \". \" + l1.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":139,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"ZD292"},"content":"\t\t\t\tString echo \u003d String.format(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t+ \"Here are the task in your list:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t+ \"%s\"","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t+ \"____________________________________________________________\", lst);","lastModifiedDate":"2023-08-24"},{"lineNumber":145,"author":{"gitId":"ZD292"},"content":"\t\t\t\tSystem.out.println(echo);","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"ZD292"},"content":"\t\t\t} else {","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new DukeException(\"enter valid args\");","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":149,"author":{"gitId":"ZD292"},"content":"\t\t} catch(DukeException e){","lastModifiedDate":"2023-08-24"},{"lineNumber":150,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(\"Enter valid string input:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t+ \"todo\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t+ \"deadline description by:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":154,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t+ \"event /from /to \\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t+ \"list\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":156,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t+ \"mark idx\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":157,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t+ \"unmark idx\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":158,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t+ \"bye\");","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":163}},{"path":"src/main/java/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"\tprivate String endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"\tpublic Deadlines(String description, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"\t\tthis.endTime \u003d endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.toString() + \" (by: \" + this.endTime + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.getTask();","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":16}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"// String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"// + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"// + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"// + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"// + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"// System.out.println(\"Hello from\\n\" + logo);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" Chatbot b1 \u003d new Chatbot(\"Zhen Dong\");","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" b1.greet();","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":" b1.run();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"ZD292":10,"-":4}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"\tpublic DukeException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"\t\tsuper(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":9}},{"path":"src/main/java/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"public class Events extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"\tprivate String startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"\tprivate String endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"\tpublic Events(String description, String startTime, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\t\tthis.startTime \u003d startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\t\tthis.endTime \u003d endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[E]\" + super.toString() + \" (from: \" + this.startTime + \" to: \" + this.endTime + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[E]\" + super.getTask();","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":19}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"\tprotected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"\tprotected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"\tpublic Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"\t\tthis.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\t\tthis.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tpublic void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t\tthis.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic void unMark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\tpublic String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t\treturn isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\treturn isDone ? \"[X]\" + \" \" + this.description : \"[ ]\" + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":25}},{"path":"src/main/java/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"public class ToDos extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"\tpublic ToDos(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.getTask();","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":15}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"todo read book","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"mark 1","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"unmark 1","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"bye","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ZD292":9}},{"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":"ZD292"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ZD292":1,"-":36}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Duke project template","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"1. Open Intellij (if you are not in the welcome screen, click `Records` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"3. After that, locate the `src/main/java/Duke.java` file, right-click it, and choose `Run Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2021-07-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ZD292":1,"-":23}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"// id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-04"},{"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":"ZD292"},"content":"//checkstyle {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"// toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"//}","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"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":"ZD292"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","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":"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":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ZD292":18,"-":42}},{"path":"duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"T | 0 | hello ","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"T | 0 | hello","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"T | 0 | hello","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"E | 0 | aa | 2023-06-26T06:00 | 2023-06-29T09:00","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"D | 0 | aa | 2023-06-29T06:00","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"E | 0 | aa | 2023-06-26T06:00 | 2023-06-29T09:00","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"E | 0 | aa | 2015-04-24T06:30 | 2015-05-25T07:30","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ZD292":7}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":" * Represent the ChatBot.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":" * Run the ChatBot to intereact with it.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":" * Contains a list of tasks, TaskList, a user interface Ui, and storage, Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"public class Duke {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":" private static final String filePath \u003d \"./duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":" * Constructs a new ChatBot to chat with.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":" * @param name Name of the ChatBot","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":" public Duke(String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":" this.ui \u003d new Ui(name);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":" tasks \u003d new TaskList(storage.readFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":" this.tasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":" * Runs the ChatBot.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":" while (ui.hasNextLine()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":" ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":" /**","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":" * @param args Main method to run ChatBot.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":" new Duke(filePath).run();","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":61}},{"path":"src/main/java/duke/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"\tpublic DukeException(String e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"\t\tsuper(e);","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":6}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" * Represents a Command to which adds a tasks when executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate final Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic AddCommand(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.task \u003d task;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t * Executes the add command which add the task into taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * Ui displays adding to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * Output of task is stored in Storage which writes to a text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * @param u displays execution of adding.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList taskList, Ui u, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\t\tstorage.writeFile(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(\"Fail to write to file\\n\" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":36}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" * Command to exit the system and say bye.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t * Executes the bye command which exits system.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t * Ui displays exiting to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param u displays execution of adding.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList taskList, Ui u, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\";","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t\t// write to file before leaving the system","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\tSystem.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":26}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" * Abstract class that represent a Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" * A Command is an executable that can execute to perform different actions.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t// only inheritors can use","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t /**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * Type of Comomand execution depends on the implementation.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute Command on.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t * @param u displays execution of Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store to text file depending on Command type.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\tpublic abstract void execute(TaskList taskList, Ui u, Storage storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":21}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" * Commmand to delete a task from the tasklist","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate final int pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic DeleteCommand(int pos) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.pos \u003d pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t * Executes the delete command which deletes a task from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t * Ui displays deleting to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * Deletion changes the contents in storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * @param u displays execution of deleting.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList taskList, Ui u, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\t\ttaskList.delete(this.pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":32}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" * Finds Task in taskList according to keyword.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\tprivate String keyWord;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic FindCommand(String keyWord) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.keyWord \u003d keyWord;","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t * Finds the Tasks that contains keywords and prints thenm in a list","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t * @param t list of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * @param u Ui to interact with User.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * @param s Storage to store Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList t, Ui u, Storage s) {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\tt.findTask(this.keyWord);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ZD292":26}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Command to list the task in the list of tasks, taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t * Executes the list command which lists all tasks from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t * Ui displays listing to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t * Storage does not store anything in this case.","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to execute.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param u displays listing of task in taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList taskList, Ui u, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.list();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":21}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" * Command to Mark or Unmark task in the taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\tprivate final boolean toMark;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate final int pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\tpublic MarkCommand(boolean toMark, int pos) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\tthis.toMark \u003d toMark;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t\tthis.pos \u003d pos;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t * Executes the Mark command which Marks or Unmarks a task from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t * Ui displays Marking or Unmarks to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * @param taskList list of tasks to mark.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * @param u displays execution of Marking or Unmarking.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t * @param storage can write tasks to store on the text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\tpublic void execute(TaskList taskList, Ui u, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\t\ttaskList.toMark(toMark, pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":33}},{"path":"src/main/java/duke/messages/Messages.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.messages;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":" * Represents different commonly used Messages to be printed to user.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class Messages {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format \\n%s\";","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSGAE_INIT_FAILED \u003d \"Failed to read duke text storage file: \\n%s\";","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSGAE_USING_STORAGE \u003d \"Using duke text storage file: \\n%s\";","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tpublic static final String MESSGAE_INCORRECT_TIME \u003d \"Enter time formt either like: \\n\"","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ \"630am 29june or 06:30:00 2023-06-29\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":14}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.command.ByeCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"import duke.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"import duke.command.FindCommand;","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import duke.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"import duke.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"import duke.task.DeadLine;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"import java.util.Calendar;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"import java.util.Date;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":" * Represents a formatting object that formats inputs in known formats.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":" * Reformats these inputs into different forms depending on the Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t * Returns the integer value of a month.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t * @param month String representation of month.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * @return Integer representation of month","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t * @throws IllegalArgumentException Throws exception should the month not be recognised.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\tpublic static String monthValue(String month) throws IllegalArgumentException {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\tswitch (month.toLowerCase()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"january\":","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"01\";","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"february\":","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"02\";","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"march\":","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"03\";","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"april\":","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"04\";","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"may\":","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"05\";","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"june\":","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"06\";","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"july\":","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"07\";","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"august\":","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"08\";","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"september\":","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"09\";","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"october\":","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"10\";","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"november\":","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"11\";","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"december\":","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn \"12\";","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t\t\tdefault:","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new IllegalArgumentException(\"Invalid month string\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t * Returns the Date formatted in the form: 2015-02-20T06:30:00.","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t * @param timeDate Array containing time and date at index 0 and 1.","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t * @return Formatted String.","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\tpublic static String formatDate(String[] timeDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t\tSimpleDateFormat inputTime \u003d new SimpleDateFormat(\"ha\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t\tSimpleDateFormat outputTime \u003d new SimpleDateFormat(\"HH:mm:ss\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\t\tString year \u003d Integer.toString(Calendar.getInstance().get(Calendar.YEAR));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t\tString dateFormat \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t\t\tDate time \u003d inputTime.parse(timeDate[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\t\t\tString formatTime \u003d outputTime.format(time);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\t\tif (timeDate.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new DukeException(\"Enter time and Date properly\");","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t\t\tString dayMonth \u003d timeDate[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\t\t\tString day;","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"\t\t\tString month;","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t\t\t\tInteger.parseInt(dayMonth.substring(1, 2));","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t\t\t\tday \u003d dayMonth.substring(0,2);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\t\t\t\tmonth \u003d dayMonth.substring(2);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\t\t\t} catch (NumberFormatException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t\t\t\tday \u003d dayMonth.substring(0,1);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"\t\t\t\tmonth \u003d dayMonth.substring(1);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"\t\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":"\t\t\tbr.append(year).append(\"-\").append(monthValue(month)).append(\"-\").append(day).append(\"T\").append(formatTime);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"\t\t\tdateFormat \u003d br.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"\t\t} catch (ParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(\"format of time is not right, enter it as /by 630pm 18june\");","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"\t\t} catch (DukeException d) {","lastModifiedDate":"2023-09-04"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(d.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":97,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"ZD292"},"content":"\t\treturn dateFormat;","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":102,"author":{"gitId":"ZD292"},"content":"\t * Converts formatted string into a command.","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"ZD292"},"content":"\t * first String array contains description of command.","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"ZD292"},"content":"\t * Accepeted inputs for time are,","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"ZD292"},"content":"\t * /by 06:30:00 2015-06-29","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"ZD292"},"content":"\t * /by 630am or pm 29 june.","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"ZD292"},"content":"\t * @param fullCommand String representing the Command with all details.","lastModifiedDate":"2023-09-04"},{"lineNumber":108,"author":{"gitId":"ZD292"},"content":"\t * @return Command which can be executed.","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"ZD292"},"content":"\t * @throws DukeException If fullCommand does not match any known Command.","lastModifiedDate":"2023-09-04"},{"lineNumber":110,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":111,"author":{"gitId":"ZD292"},"content":"\tpublic static Command parse(String fullCommand) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"ZD292"},"content":"\t\tString[] command \u003d fullCommand.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"ZD292"},"content":"\t\tString commandWord \u003d fullCommand.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"ZD292"},"content":"\t\tString[] items \u003d fullCommand.split(\"/\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"ZD292"},"content":"\t\tString[] first \u003d items[0].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder description \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder startTime \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder endTime \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"ZD292"},"content":"\t\tswitch (commandWord) {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"bye\":","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn new ByeCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"list\":","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"ZD292"},"content":"\t\t\t\treturn new ListCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"find\":","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Enter the find with one keyword\");","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString keyWord \u003d command[1];","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new FindCommand(keyWord);","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"mark\":","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":139,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Please specify where to mark\");","lastModifiedDate":"2023-09-04"},{"lineNumber":140,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":141,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint pos \u003d Integer.parseInt(command[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new MarkCommand(true, pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Cannot mark given position\\n\" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (NumberFormatException n) {","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Not a valid position to mark\\n\" + n.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":149,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"unmark\":","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":152,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Please specify where to unmark\");","lastModifiedDate":"2023-09-04"},{"lineNumber":153,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":154,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint pos \u003d Integer.parseInt(command[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new MarkCommand(false, pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Cannot mark given position\\n\" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (NumberFormatException n) {","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Not a valid position to mark\\n\" + n.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":162,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"delete\":","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length !\u003d 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Enter a valid position to delete\");","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tint pos \u003d Integer.parseInt(command[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new DeleteCommand(pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"Trying to delete from an invalid index\\n\" + e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException d) {","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(d.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (NumberFormatException n) {","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(\"The delete argument is not recognise as an integer\\n\" + n.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":177,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"todo\":","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (command.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"Enter todo with a description!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tfor (String s : Arrays.copyOfRange(command, 1, command.length)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(s);","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tdescription.deleteCharAt(description.length() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\treturn new AddCommand(new ToDo(description.toString()));","lastModifiedDate":"2023-09-04"},{"lineNumber":188,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":192,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"deadline\":","lastModifiedDate":"2023-09-03"},{"lineNumber":193,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":194,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":195,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter deadline like this, deadline description /by:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":196,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":197,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] byCheck \u003d items[1].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":198,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (!byCheck[0].equals(\"by\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":199,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter deadline like this, deadline description /by: enter the by!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":200,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":201,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] start \u003d items[0].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":202,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (start.length \u003d\u003d 1) {","lastModifiedDate":"2023-09-04"},{"lineNumber":203,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter deadline with description\");","lastModifiedDate":"2023-09-04"},{"lineNumber":204,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":205,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tfor (String s : Arrays.copyOfRange(start, 1, start.length)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":206,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(s).append(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":207,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":208,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tdescription.deleteCharAt(description.length() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":209,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items[1].contains(\"am\") || items[1].contains(\"pm\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":210,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeDate \u003d Arrays.copyOfRange(items[1].split(\" \"), 1, items[1].split(\" \").length);","lastModifiedDate":"2023-09-03"},{"lineNumber":211,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (timeDate.length !\u003d 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":212,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Enter time and date properly\");","lastModifiedDate":"2023-09-04"},{"lineNumber":213,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":214,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString dateFormat \u003d formatDate(timeDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":215,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(dateFormat);","lastModifiedDate":"2023-09-03"},{"lineNumber":216,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new DeadLine(description.toString(), begin));","lastModifiedDate":"2023-09-04"},{"lineNumber":217,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t} else {","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] time \u003d Arrays.copyOfRange(items[1].split(\" \"), 1, 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":219,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tstartTime.append(time[1]).append(\"T\").append(time[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":220,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(startTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new DeadLine(description.toString(), begin));","lastModifiedDate":"2023-09-04"},{"lineNumber":222,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":223,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":224,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":225,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":226,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":227,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"event\":","lastModifiedDate":"2023-09-03"},{"lineNumber":228,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":229,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items.length !\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":230,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter event properly, event description /from /to\");","lastModifiedDate":"2023-09-04"},{"lineNumber":231,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":232,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] startCheck \u003d items[1].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":233,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tString[] endCheck \u003d items[2].split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":234,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (!endCheck[0].equals(\"to\") || !startCheck[0].equals(\"from\")) {","lastModifiedDate":"2023-09-04"},{"lineNumber":235,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tthrow new DukeException(\"enter event properly, event description /from /to\");","lastModifiedDate":"2023-09-03"},{"lineNumber":236,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":237,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tfor (String s : Arrays.copyOfRange(first, 1, first.length)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":238,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tdescription.append(s).append(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":239,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":240,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tdescription.deleteCharAt(description.length() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":241,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tif (items[1].contains(\"am\") || items[1].contains(\"pm\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":242,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] fromTimeStart \u003d items[1].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":243,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] byTimeEnd \u003d items[2].split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":244,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (fromTimeStart.length !\u003d 3 || byTimeEnd.length !\u003d 3) {","lastModifiedDate":"2023-09-04"},{"lineNumber":245,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Enter Event properly\");","lastModifiedDate":"2023-09-04"},{"lineNumber":246,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":247,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeDateStart \u003d Arrays.copyOfRange(fromTimeStart, 1, fromTimeStart.length);","lastModifiedDate":"2023-09-04"},{"lineNumber":248,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString dateFormatStart \u003d formatDate(timeDateStart);","lastModifiedDate":"2023-09-03"},{"lineNumber":249,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(dateFormatStart);","lastModifiedDate":"2023-09-03"},{"lineNumber":250,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeDateEnd \u003d Arrays.copyOfRange(byTimeEnd, 1, byTimeEnd.length);","lastModifiedDate":"2023-09-04"},{"lineNumber":251,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString dateFormatEnd \u003d formatDate(timeDateEnd);","lastModifiedDate":"2023-09-03"},{"lineNumber":252,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime end \u003d LocalDateTime.parse(dateFormatEnd);","lastModifiedDate":"2023-09-03"},{"lineNumber":253,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (begin.isAfter(end)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":254,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Start is after end!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":255,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":256,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new Event(description.toString(), begin, end));","lastModifiedDate":"2023-09-03"},{"lineNumber":257,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t} else {","lastModifiedDate":"2023-09-03"},{"lineNumber":258,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeStart \u003d Arrays.copyOfRange(items[1].split(\" \"), 1, 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":259,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tstartTime.append(timeStart[1]).append(\"T\").append(timeStart[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":260,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tSystem.out.println(startTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":261,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime begin \u003d LocalDateTime.parse(startTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":262,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":263,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tString[] timeEnd \u003d Arrays.copyOfRange(items[2].split(\" \"), 1, 3);","lastModifiedDate":"2023-09-03"},{"lineNumber":264,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tendTime.append(timeEnd[1]).append(\"T\").append(timeEnd[0]);","lastModifiedDate":"2023-09-03"},{"lineNumber":265,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tLocalDateTime end \u003d LocalDateTime.parse(endTime.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":266,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\tif (begin.isAfter(end)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":267,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t\tthrow new DukeException(\"Start is after end!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":268,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":269,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\treturn new AddCommand(new Event(description.toString(), begin, end));","lastModifiedDate":"2023-09-03"},{"lineNumber":270,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":271,"author":{"gitId":"ZD292"},"content":"\t\t\t\t} catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":272,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":273,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":274,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-04"},{"lineNumber":275,"author":{"gitId":"ZD292"},"content":"\t\t\tdefault:","lastModifiedDate":"2023-09-03"},{"lineNumber":276,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new DukeException(\"Invalid command that do not match any known command\");","lastModifiedDate":"2023-09-03"},{"lineNumber":277,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":278,"author":{"gitId":"ZD292"},"content":"\t\tthrow new DukeException(\"Invalid command does not match any known command\");","lastModifiedDate":"2023-09-04"},{"lineNumber":279,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":280,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"},{"lineNumber":281,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":281}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.ToDo;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import duke.task.DeadLine;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":" * Represents te computer storage system.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":" * Able to write Task to storage text file through writeFile method.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\tprivate String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\tprivate ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\tpublic Storage(String filePath) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\tthis.filePath \u003d filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t\tthis.taskList \u003d new ArrayList\u003cTask\u003e(100);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * Writes Task into text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t * Creates text file if it does not exist.","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t * @param task Thing to be done.","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t * @throws IOException If unable to write file.","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\tpublic void writeFile(Task task) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\ttry {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\t\tFileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t\t\t\tfw.write(task.writeToFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\t\t\tfw.write(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\t\tfw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t\t\tthrow new IOException(\"write fail\");","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t * Reads stored text file line by line.","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t * @return ArrayList of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t * @throws IOException If unable to read lines in text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\tpublic ArrayList\u003cTask\u003e readFile() throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t\ttry (BufferedReader in \u003d new BufferedReader(new FileReader(filePath))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t\t\tString fileLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\t\twhile ((fileLine \u003d in.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t\t\t\t// append raw unformatted version","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbr.append(fileLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbr.append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\t\t\treadTask(fileLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"\t\t} catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t\treturn taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t// the file stored needs to be reformatted","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\t * Converts each line into the format shown to reader.","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t * @param fileLine Each line in the file.","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t * @throws IOException If unable to read task in file as Deadline[D], Event[E] or ToDos[T].","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\tpublic void readTask(String fileLine) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\tString[] str \u003d fileLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t\tfor (int i \u003d 0; i \u003c str.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t\t\tString s \u003d str[i].trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t\t\tstr[i] \u003d s;","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\t\tString taskType \u003d str[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t\tString isDone \u003d str[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t\tswitch(taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttaskList.add(new ToDo(str[2]));","lastModifiedDate":"2023-09-04"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"\t\t\t\tLocalDateTime startTime \u003d LocalDateTime.parse(str[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttaskList.add(new DeadLine(str[2], startTime));","lastModifiedDate":"2023-09-04"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":"\t\t\t\t// t.add(new Deadline(str[2], str[3]));","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"\t\t\tcase \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"\t\t\t\tLocalDateTime start \u003d LocalDateTime.parse(str[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"\t\t\t\tLocalDateTime end \u003d LocalDateTime.parse(str[4]);","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"\t\t\t\ttaskList.add(new Event(str[2], start, end));","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"ZD292"},"content":"\t\t\t\tbreak;","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"ZD292"},"content":"\t\t\tdefault:","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"ZD292"},"content":"\t\t\t\tthrow new IOException(\"read fail\");","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":103,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":104,"author":{"gitId":"ZD292"},"content":"\t * Deletes tasks from taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":105,"author":{"gitId":"ZD292"},"content":"\t * @param i Position of tasks to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":106,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":107,"author":{"gitId":"ZD292"},"content":"\tpublic void deleteTask(int i) {","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.remove(i - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":109,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":111}},{"path":"src/main/java/duke/task/DeadLine.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Represents a Deadline Task which.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Has a description and Deadline endTime.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class DeadLine extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tprivate final LocalDateTime endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Represents a DeadLine Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param description Describes the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param endTime By what time must I complete this DeadLine Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\tpublic DeadLine(String description, LocalDateTime endTime) {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\tthis.endTime \u003d endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t * Returns a String to be written into Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t * @return Reformatted String suitable for Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder b \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t\tb.append(\"D\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t\tif (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"1\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"0\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.description).append(\" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.endTime.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\treturn b.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of DeadLine.","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\tString[] time \u003d this.endTime.toString().split(\"T\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t\tString timeDate \u003d time[1] + \" \" + time[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.toString() + \" (by: \" + timeDate + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.getTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ZD292":52}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Represents an Event Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Has a description, startTime and endTime.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tprivate final LocalDateTime startTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tprivate final LocalDateTime endTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Represents an Event Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param description Describes the Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t * @param startTime Time Event starts.","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t * @param endTime Time Event ends.","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\tpublic Event(String description, LocalDateTime startTime, LocalDateTime endTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t\tthis.startTime \u003d startTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\tthis.endTime \u003d endTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t * Returns a String to be written into Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t * @return Reformatted String suitable for Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder b \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\tb.append(\"E\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\tif (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"1\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"0\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.description).append(\" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.startTime).append(\" | \").append(this.endTime);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\treturn b.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Event.","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\tString[] start \u003d this.startTime.toString().split(\"T\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t\tString startDate \u003d start[1] + \" \" + start[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\tString[] end \u003d this.endTime.toString().split(\"T\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t\tString endDate \u003d end[1] + \" \" + end[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[E]\" + super.toString() + \" (from: \" + startDate + \" to: \" + endDate + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[E]\" + super.getTask();","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"ZD292":58}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":" * Represents a Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Task can be marked as done or unmarked.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" * Can be written to Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tprotected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tprotected boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Represents the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param description Describes the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\tpublic Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t\tthis.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t\tthis.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t * Marks Task as done.","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\tpublic void markAsDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t\tthis.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * Unmarks the Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\tpublic void unMark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\tthis.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t * @return String Representation of whether Task is done or not.","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\tpublic String getTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\treturn isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Task to be written to text file.","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\treturn \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":" \t * @return String representation of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\treturn isDone ? \"[X]\" + \" \" + this.description : \"[ ]\" + \" \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":59}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import duke.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":" * Represents a List of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\tprivate ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @param taskList Represents the list of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\tpublic TaskList(ArrayList\u003cTask\u003e taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\t\tthis.taskList \u003d taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t * Initialises a new arrayList to store Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\tpublic TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\tthis.taskList \u003d new ArrayList\u003cTask\u003e(100);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t * Add task to list.","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * @param t Task to be added.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\tpublic void add(Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.add(t);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\t * List all task in taskList in numbered format.","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\tpublic void list() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\t\tString lst \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t\tfor (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\t\t\t// int idx \u003d i + 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\t\tbr.append(i + 1).append(\". \");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t\t\tbr.append((taskList.get(i)).toString()).append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d String.format(\"____________________________________________________________\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\t\t\t+ \"Here are the task in your list:\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\t\t\t+ \"%s\"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t\t\t\t+ \"____________________________________________________________\", br.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t * Marks task.","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t * @param toMark Whether to mark Task as done or not.","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t * @param idx Index of task to be marked, starting from 0.","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t * @throws DukeException If unable to mark task at specified idx.","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\tpublic void toMark(Boolean toMark, int idx) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\tif (idx + 1 \u003e taskList.size()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t\t\tthrow new DukeException(\"Trying to mark or unmark something beyond the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t\tTask t \u003d taskList.get(idx);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t\tif (toMark) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t\t\tt.markAsDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\"Nice! I\u0027ve marked this task as done:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tt.toString() + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\"____________________________________________________________\");","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t\t\ttaskList.get(idx).unMark();","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\"Nice! I\u0027ve marked this task as not done yet:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tt.toString() + \"\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\t\"____________________________________________________________\");","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t * Adds task and prints String represntation of what was done.","lastModifiedDate":"2023-09-04"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t * @param task Represents the Task to be added to taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"\tpublic void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"\t\tthis.taskList.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"ZD292"},"content":"\t\tTask t \u003d taskList.get(taskList.size() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"%s\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Now you have %s tasks in the list\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\", t.toString(), taskList.size());","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":98,"author":{"gitId":"ZD292"},"content":"\t * Deletes task from the taskList.","lastModifiedDate":"2023-09-04"},{"lineNumber":99,"author":{"gitId":"ZD292"},"content":"\t * @param pos Position of Task in the taskList to be deleted.","lastModifiedDate":"2023-09-04"},{"lineNumber":100,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":101,"author":{"gitId":"ZD292"},"content":"\tpublic void delete(int pos) {","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"ZD292"},"content":"\t\tTask t \u003d taskList.get(pos - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"ZD292"},"content":"\t\tString remaining \u003d Integer.toString(taskList.size() - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"ZD292"},"content":"\t\ttaskList.remove(pos);","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"ZD292"},"content":"\t\tString echo \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Noted. I\u0027ve removed this task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"%s\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Now you have %s tasks in the list.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\", t.toString(), remaining);","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(echo);","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":113,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":114,"author":{"gitId":"ZD292"},"content":"\t * Returns String representation of task at a given index, starting from 0.","lastModifiedDate":"2023-09-04"},{"lineNumber":115,"author":{"gitId":"ZD292"},"content":" \t * @param i Index of Task in taskList that we are interested in.","lastModifiedDate":"2023-09-04"},{"lineNumber":116,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":117,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":118,"author":{"gitId":"ZD292"},"content":"\tpublic String getTask(int i) {","lastModifiedDate":"2023-09-04"},{"lineNumber":119,"author":{"gitId":"ZD292"},"content":"\t\treturn taskList.get(i).toString();","lastModifiedDate":"2023-09-04"},{"lineNumber":120,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":121,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":122,"author":{"gitId":"ZD292"},"content":"\tpublic void findTask(String keyWord) {","lastModifiedDate":"2023-09-04"},{"lineNumber":123,"author":{"gitId":"ZD292"},"content":"\t\tint count \u003d 1;","lastModifiedDate":"2023-09-04"},{"lineNumber":124,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder br \u003d new StringBuilder();","lastModifiedDate":"2023-09-04"},{"lineNumber":125,"author":{"gitId":"ZD292"},"content":"\t\tfor (Task t: taskList) {","lastModifiedDate":"2023-09-04"},{"lineNumber":126,"author":{"gitId":"ZD292"},"content":"\t\t\tString[] words \u003d t.toString().split(\" \");","lastModifiedDate":"2023-09-04"},{"lineNumber":127,"author":{"gitId":"ZD292"},"content":"\t\t\tfor (String w: words) {","lastModifiedDate":"2023-09-04"},{"lineNumber":128,"author":{"gitId":"ZD292"},"content":"\t\t\t\tif (w.equals(keyWord)) {","lastModifiedDate":"2023-09-04"},{"lineNumber":129,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\tbr.append(count).append(\". \").append(t.toString()).append(\"\\n\");","lastModifiedDate":"2023-09-04"},{"lineNumber":130,"author":{"gitId":"ZD292"},"content":"\t\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":131,"author":{"gitId":"ZD292"},"content":"\t\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":132,"author":{"gitId":"ZD292"},"content":"\t\t\tcount++;","lastModifiedDate":"2023-09-04"},{"lineNumber":133,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":134,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(br.toString());","lastModifiedDate":"2023-09-04"},{"lineNumber":135,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":136,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":136}},{"path":"src/main/java/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"/**","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":" * Represents Task to be done.","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":" * Contains a description of what is to be done.","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":" */","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tpublic ToDo(String description) {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t\tsuper(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t * Returns a String to be written into Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t * @return Reformatted String suitable for Storage.","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"\tpublic String writeToFile() {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\t\tStringBuilder b \u003d new StringBuilder();","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"\t\tb.append(\"T\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t\tif (this.isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"1\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\t} else {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t\t\tb.append(\"0\" + \" | \");","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"\t\tb.append(this.description);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\t\treturn b.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t/**","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t * @return String representation of Task.","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\t */","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t@Override","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\tpublic String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"\tpublic String getIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t\treturn \"[D]\" + super.getTask();","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"ZD292":39}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\tprivate String name;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tprivate final Scanner in;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tprivate PrintStream out;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\tprivate static final String COMMENT_LINE_REGEX \u003d \"#.\";","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\tprivate static final String LOGO \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"\t\t\t+ \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"ZD292"},"content":"\tprivate static final String DIVIDER \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"ZD292"},"content":"\t// scannner takes in inputstream","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"ZD292"},"content":"\tpublic Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"ZD292"},"content":"\t\tthis.in \u003d new Scanner(in);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"ZD292"},"content":"\t\tthis.out \u003d out;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"ZD292"},"content":"\tpublic Ui(String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"ZD292"},"content":"\t\tthis(System.in, System.out);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"ZD292"},"content":"\t\tthis.name \u003d name;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"ZD292"},"content":"\tpublic boolean hasNextLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"ZD292"},"content":"\t\treturn this.in.hasNextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"ZD292"},"content":"\t// return the fullcommand? lines(--\u003e commands) separated by \\n","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"ZD292"},"content":"\t//","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"ZD292"},"content":"\t// our run will do ui.hasnextline()","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"ZD292"},"content":"\tprivate boolean isCommentLine(String inputLine) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"ZD292"},"content":"\t\treturn inputLine.trim().matches(COMMENT_LINE_REGEX);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"ZD292"},"content":"\tprivate boolean shouldIgnore(String inputLine) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"ZD292"},"content":"\t\treturn inputLine.trim().isEmpty() || isCommentLine(inputLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"ZD292"},"content":"\tpublic String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"ZD292"},"content":"\t\t// has nextline then save it skip the comments","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"ZD292"},"content":"\t\tout.print(\"Enter your Command:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"ZD292"},"content":"\t\tString inputLine \u003d in.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"ZD292"},"content":"\t\twhile (shouldIgnore(inputLine)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"ZD292"},"content":"\t\t\tinputLine \u003d in.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"ZD292"},"content":"\t\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"ZD292"},"content":"\t\tString message \u003d String.format(\"Command entered: %s\", inputLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"ZD292"},"content":"\t\treturn inputLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"ZD292"},"content":"\tpublic void showLoadingError(Exception e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(\"Unable to process stored file:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"ZD292"},"content":"\tpublic void showWelcome() {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"ZD292"},"content":"\t\tString greeting \u003d String.format(\"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Hello! I\u0027m %s\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"What can I do for you?\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\", this.name);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(LOGO);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(greeting);","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"ZD292"},"content":"\tpublic void showGoodBye() {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"ZD292"},"content":"\t\tString bye \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"ZD292"},"content":"\t\t\t\t\"____________________________________________________________\";","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(bye);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"ZD292"},"content":"\t\t// write to file before leaving the system","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"ZD292"},"content":"//\t\tr.writeFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"ZD292"},"content":"\t\tSystem.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"ZD292"},"content":"\tpublic void showLine() {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"ZD292"},"content":"\t\tSystem.out.println(DIVIDER);","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"ZD292":87}},{"path":"src/test/java/duke/parser/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.parser;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"\t@Test","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\tpublic void formatDateTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\t\tString expected \u003d \"2023-06-29T06:00:00\";","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t\tString[] input \u003d {\"630am\", \"29june\"};","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t\tString actual \u003d Parser.formatDate(input);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t\tassertEquals(expected, actual);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ZD292":16}},{"path":"src/test/java/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"package duke.task;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"\t@Test","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"\tpublic void writeToFileTest() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"ZD292"},"content":"\t\tToDo t \u003d new ToDo(\"hello\");","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"ZD292"},"content":"\t\tString expected \u003d \"T | 0 | hello\";","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"ZD292"},"content":"\t\tassertEquals(t.writeToFile(), expected);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"ZD292"},"content":"\t}","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"ZD292"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"ZD292":14}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"ZD292"},"content":"todo read book","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"ZD292"},"content":"mark 1","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"ZD292"},"content":"deadline return book /by June 6th","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"ZD292"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"ZD292"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"ZD292"},"content":"unmark 1","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"ZD292"},"content":"list","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"ZD292"},"content":"deadline do homework /by no idea :-p","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"ZD292"},"content":"bye","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"ZD292":9}},{"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":"ZD292"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ZD292":1,"-":36}}] diff --git a/ZD292_ip_master/commits.json b/ZD292_ip_master/commits.json index 3b48b800..62050d5b 100644 --- a/ZD292_ip_master/commits.json +++ b/ZD292_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ZD292":[{"date":"2023-08-24","commitResults":[{"hash":"85fb8175a1af58d6166e23206494ee44d0798dde","isMergeCommit":false,"messageTitle":"L0 greeting implemented","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"f5a0af5c2fdfe426b27f10da276a54cde9b1d78d","isMergeCommit":false,"messageTitle":"bot can respond now","messageBody":"","tags":["Level1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":5}}},{"hash":"ce7de6070210390331da9054c496b2e653f45c83","isMergeCommit":false,"messageTitle":"commit level 2","messageBody":"","tags":["Level-3","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":19}}},{"hash":"ffa5dde0f572e2cfc29d69f41a3386970d9cc6e3","isMergeCommit":false,"messageTitle":"v3 commit tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"fb1b575c8b730de38047510491f9df7ae1aaed12","isMergeCommit":false,"messageTitle":"implemented Events","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":16}}},{"hash":"5492c2408c0f192d69d4d8d19b6c4270c683e032","isMergeCommit":false,"messageTitle":"level 5 handling exceptions","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":68}}},{"hash":"8149c14da7e64d54f4ebe3a14686bbcb532cb51f","isMergeCommit":false,"messageTitle":"level 6 added a delete function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b07af05778de6ab938ccbac37fdf4ef8f5581ea0","isMergeCommit":false,"messageTitle":"testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"b8fceabc358c8a9e3498e2343f9d20779129f434","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":2,"deletions":1},"bat":{"insertions":0,"deletions":1},"sh":{"insertions":1,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"ZD292":{"java":257,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":9}},"authorContributionVariance":{"ZD292":16823.762},"authorDisplayNameMap":{"ZD292":"CS2103T-T10-3 ONG ..DONG"}} +{"authorDailyContributionsMap":{"ZD292":[{"date":"2023-08-24","commitResults":[{"hash":"85fb8175a1af58d6166e23206494ee44d0798dde","isMergeCommit":false,"messageTitle":"L0 greeting implemented","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"f5a0af5c2fdfe426b27f10da276a54cde9b1d78d","isMergeCommit":false,"messageTitle":"bot can respond now","messageBody":"","tags":["Level1"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":5}}},{"hash":"ce7de6070210390331da9054c496b2e653f45c83","isMergeCommit":false,"messageTitle":"commit level 2","messageBody":"","tags":["Level-3","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":37,"deletions":19}}},{"hash":"ffa5dde0f572e2cfc29d69f41a3386970d9cc6e3","isMergeCommit":false,"messageTitle":"v3 commit tasks","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":5}}},{"hash":"fb1b575c8b730de38047510491f9df7ae1aaed12","isMergeCommit":false,"messageTitle":"implemented Events","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":107,"deletions":16}}},{"hash":"5492c2408c0f192d69d4d8d19b6c4270c683e032","isMergeCommit":false,"messageTitle":"level 5 handling exceptions","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":117,"deletions":68}}},{"hash":"8149c14da7e64d54f4ebe3a14686bbcb532cb51f","isMergeCommit":false,"messageTitle":"level 6 added a delete function","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}}]},{"date":"2023-08-27","commitResults":[{"hash":"b07af05778de6ab938ccbac37fdf4ef8f5581ea0","isMergeCommit":false,"messageTitle":"testing","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-30","commitResults":[{"hash":"b8fceabc358c8a9e3498e2343f9d20779129f434","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":2,"deletions":1},"bat":{"insertions":0,"deletions":1},"sh":{"insertions":1,"deletions":2}}},{"hash":"d8e78e382c372842a1ec79816574db4cb62e4bf6","isMergeCommit":false,"messageTitle":"testing branch","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"b60a1298eb3aa7af7d24f6bd232b7149b54834a2","isMergeCommit":false,"messageTitle":"level 7 branch","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":222,"deletions":71},"md":{"insertions":1,"deletions":1}}},{"hash":"dd5c3ea1cfb714a116d8f4d35addbeaf16b5c865","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-01","commitResults":[{"hash":"656ec7ea725eab6b0e79a6583a4782b16fecee4e","isMergeCommit":false,"messageTitle":"fixing merge conflicts","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":1},"java":{"insertions":110,"deletions":67}}},{"hash":"59512c87915456ba204b5e1842192826cc1099cc","isMergeCommit":false,"messageTitle":"resolve merge conflicts and updated methods","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":124}}},{"hash":"7cb63fa4d7bea1ac6a2f99a5a52c4ac8c54bb939","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"397a787e57dfa74e56796b579c7d5cf54cd7c773","isMergeCommit":false,"messageTitle":"level 8 branch, updated time format","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":147,"deletions":28}}},{"hash":"313368dd87eec8c0c5dbae5cac96fd6045671d07","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"e1868a57a5208b86a2ad719622f66d94e15deff6","isMergeCommit":false,"messageTitle":"A-MoreOOP and packaging","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":754,"deletions":455}}},{"hash":"b74e20eba3bfff41d9bd55efefc9cf1e1f855a62","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"","tags":["MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"aca13efb784aaa974e8e5c1c038e0e9f3a14844f","isMergeCommit":true,"messageTitle":"Merge branch \u0027gradle\u0027 into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"21d9640bc1b8c4a76cf2b0f22d7118c7ecfb1412","isMergeCommit":false,"messageTitle":"gradle Junit and Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":18,"deletions":0},"java":{"insertions":37,"deletions":98}}},{"hash":"a1ec7930ffd7dc1a69b16fb5b7a7015f15674727","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027","messageBody":"","tags":["Gradle"],"fileTypesAndContributionMap":{}},{"hash":"d0c28bc355d154ffe332b846d9be29b14f36efeb","isMergeCommit":false,"messageTitle":"Added JavaDocs","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":1},"java":{"insertions":275,"deletions":52}}},{"hash":"9b08a50cc4e4e5c9ceb6b8daff2fb2f80666b431","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","tags":["JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"767699f681631b62f8f5deb5fd7c361f0cc7e02f","isMergeCommit":false,"messageTitle":"Adhere to Coding standards","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":7}}},{"hash":"b85f59929554af96314b637f53bbad8d8234be44","isMergeCommit":true,"messageTitle":"fix merge conflicts","messageBody":"","tags":["coding-standard"],"fileTypesAndContributionMap":{}},{"hash":"c35c263292f171fc5e44f656fdf700f73a0d41d0","isMergeCommit":false,"messageTitle":"Added FindCommand","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":62,"deletions":6}}},{"hash":"3d99a0afbd5435e75f49084a1dcfb1d521a1a93f","isMergeCommit":true,"messageTitle":"fix merge conflits","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"0230d569e5dfac48c0c7b14aa3a33dde13cc71d3","isMergeCommit":false,"messageTitle":"fixed some edge cases","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":4},"txt":{"insertions":4,"deletions":16},"java":{"insertions":36,"deletions":10}}}]}]},"authorFileTypeContributionMap":{"ZD292":{"java":1129,"md":1,"fxml":0,"sh":1,"bat":0,"gradle":18,"txt":16}},"authorContributionVariance":{"ZD292":102038.99},"authorDisplayNameMap":{"ZD292":"CS2103T-T10-3 ONG ..DONG"}} diff --git a/adammangzijun_ip_master/commits.json b/adammangzijun_ip_master/commits.json index 7a2b5ead..fef79a5a 100644 --- a/adammangzijun_ip_master/commits.json +++ b/adammangzijun_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"adammangzijun":[{"date":"2023-08-24","commitResults":[{"hash":"c26bb3b4277a7bcd7875c784b51cf1d58074cc1e","isMergeCommit":false,"messageTitle":"Feature 0: added the base message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"01f74e27fa1c9df4bdccacfcf66b324e783fee91","isMergeCommit":false,"messageTitle":"Feature 1: added user input and cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"e4c5f9e0e595ff5be369445af0018b0c527a60fd","isMergeCommit":false,"messageTitle":"Feature 2: added add function and list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"8b2ed9a66a1f1ef8524696e5f5b8ef109e21d110","isMergeCommit":false,"messageTitle":"Feature 3: added Task class and mark/unmark function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":5}}},{"hash":"41b271bfd9d5d3fe85924c196e46c16158ff80d5","isMergeCommit":false,"messageTitle":"Feature 4: added subclasses of Task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":26}}},{"hash":"e23e2bf7c84cf901250781cbd1649ab0bfdfa72f","isMergeCommit":false,"messageTitle":"Feature Test: Trying out test cases","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"136d10bd2011978caa700fd534d8c2d30f46e16a","isMergeCommit":false,"messageTitle":"Feature 5: handled the error of inputs for todo, deadline, event and also invalid command inputs","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":38}}},{"hash":"b6d1590512016a97b7ea23ce0b6be65b9e6463dc","isMergeCommit":false,"messageTitle":"Feature 6: added delete function and changed String[] array to ArrayList\u003cTask\u003e.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":8}}},{"hash":"5329de0488a15a995244afae7688c343e3e249e9","isMergeCommit":false,"messageTitle":"Feature 6: Updated on the documentations and edited the formatting of code","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}}]},{"date":"2023-08-25","commitResults":[{"hash":"8178528380f9ed3244b60e25edc35d9e65b232e7","isMergeCommit":false,"messageTitle":"Feature 6: updated the error handling for delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"6df6211dda658ca90d2b9e69f1a102729b4c9dd3","isMergeCommit":false,"messageTitle":"Add enum and modified javaDoc","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":42}}},{"hash":"b9ba9bfb679e2d35f75717b7f640f14b1a516016","isMergeCommit":false,"messageTitle":"added local storage of data, without handling corrupted data","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":154,"deletions":44}}}]},{"date":"2023-09-02","commitResults":[{"hash":"35afc72942d9e9d0aacee3fb618c1afb9ab265e1","isMergeCommit":false,"messageTitle":"added date and time for events and deadline","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":174,"deletions":15}}},{"hash":"a5d84bebe21ad6759186e99d536c298ab9873e36","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"ea73bb768b2f4b5c7139e690d1e021c80faa8090","isMergeCommit":false,"messageTitle":"Added more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":515,"deletions":309}}},{"hash":"78bdc33ebc064f3858a0552d52af1a91fb4c57b4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Level-7","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"47a96481b74ff0a6c396e1cd99e46479947d41cb","isMergeCommit":true,"messageTitle":"Merge commit \u002728ad2b878f1a21d03879e81cd441d0175d89e6b1\u0027 into HEAD","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"6370259ee0b44a9c7422141501cb99a066b422b8","isMergeCommit":false,"messageTitle":"Added gradle, packages and JUnit","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":0,"deletions":3},"java":{"insertions":228,"deletions":31}}},{"hash":"bd902eb05a9ddd23481a7996ca44e8610d57705e","isMergeCommit":false,"messageTitle":"Changed build.gradle and also added duke.Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"e0fa7d4572fc690a51633e59692f50b3b4389f90","isMergeCommit":true,"messageTitle":"Merge commit \u0027bd902eb05a9ddd23481a7996ca44e8610d57705e\u0027","messageBody":"# Conflicts:\n#\tbuild.gradle\n","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"adammangzijun":{"java":933,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":7,"txt":2}},"authorContributionVariance":{"adammangzijun":46312.25},"authorDisplayNameMap":{"adammangzijun":"CS2103T-T12-4 ADAM.. JUN"}} +{"authorDailyContributionsMap":{"adammangzijun":[{"date":"2023-08-24","commitResults":[{"hash":"c26bb3b4277a7bcd7875c784b51cf1d58074cc1e","isMergeCommit":false,"messageTitle":"Feature 0: added the base message","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":6}}},{"hash":"01f74e27fa1c9df4bdccacfcf66b324e783fee91","isMergeCommit":false,"messageTitle":"Feature 1: added user input and cases","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":0}}},{"hash":"e4c5f9e0e595ff5be369445af0018b0c527a60fd","isMergeCommit":false,"messageTitle":"Feature 2: added add function and list function","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":2}}},{"hash":"8b2ed9a66a1f1ef8524696e5f5b8ef109e21d110","isMergeCommit":false,"messageTitle":"Feature 3: added Task class and mark/unmark function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":5}}},{"hash":"41b271bfd9d5d3fe85924c196e46c16158ff80d5","isMergeCommit":false,"messageTitle":"Feature 4: added subclasses of Task","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":127,"deletions":26}}},{"hash":"e23e2bf7c84cf901250781cbd1649ab0bfdfa72f","isMergeCommit":false,"messageTitle":"Feature Test: Trying out test cases","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0}}},{"hash":"136d10bd2011978caa700fd534d8c2d30f46e16a","isMergeCommit":false,"messageTitle":"Feature 5: handled the error of inputs for todo, deadline, event and also invalid command inputs","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":38}}},{"hash":"b6d1590512016a97b7ea23ce0b6be65b9e6463dc","isMergeCommit":false,"messageTitle":"Feature 6: added delete function and changed String[] array to ArrayList\u003cTask\u003e.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":8}}},{"hash":"5329de0488a15a995244afae7688c343e3e249e9","isMergeCommit":false,"messageTitle":"Feature 6: Updated on the documentations and edited the formatting of code","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":6}}}]},{"date":"2023-08-25","commitResults":[{"hash":"8178528380f9ed3244b60e25edc35d9e65b232e7","isMergeCommit":false,"messageTitle":"Feature 6: updated the error handling for delete","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"6df6211dda658ca90d2b9e69f1a102729b4c9dd3","isMergeCommit":false,"messageTitle":"Add enum and modified javaDoc","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":63,"deletions":42}}},{"hash":"b9ba9bfb679e2d35f75717b7f640f14b1a516016","isMergeCommit":false,"messageTitle":"added local storage of data, without handling corrupted data","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":154,"deletions":44}}}]},{"date":"2023-09-02","commitResults":[{"hash":"35afc72942d9e9d0aacee3fb618c1afb9ab265e1","isMergeCommit":false,"messageTitle":"added date and time for events and deadline","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":174,"deletions":15}}},{"hash":"a5d84bebe21ad6759186e99d536c298ab9873e36","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"ea73bb768b2f4b5c7139e690d1e021c80faa8090","isMergeCommit":false,"messageTitle":"Added more OOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":515,"deletions":309}}},{"hash":"78bdc33ebc064f3858a0552d52af1a91fb4c57b4","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 into branch-Level-7","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"47a96481b74ff0a6c396e1cd99e46479947d41cb","isMergeCommit":true,"messageTitle":"Merge commit \u002728ad2b878f1a21d03879e81cd441d0175d89e6b1\u0027 into HEAD","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-04","commitResults":[{"hash":"6370259ee0b44a9c7422141501cb99a066b422b8","isMergeCommit":false,"messageTitle":"Added gradle, packages and JUnit","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":5,"deletions":0},"txt":{"insertions":0,"deletions":3},"java":{"insertions":228,"deletions":31}}},{"hash":"bd902eb05a9ddd23481a7996ca44e8610d57705e","isMergeCommit":false,"messageTitle":"Changed build.gradle and also added duke.Jar","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}},{"hash":"e0fa7d4572fc690a51633e59692f50b3b4389f90","isMergeCommit":true,"messageTitle":"Merge commit \u0027bd902eb05a9ddd23481a7996ca44e8610d57705e\u0027","messageBody":"# Conflicts:\n#\tbuild.gradle\n","tags":["A-Jar"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"adammangzijun":{"java":933,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":7,"txt":2}},"authorContributionVariance":{"adammangzijun":46312.25},"authorDisplayNameMap":{"adammangzijun":"CS2103T-T12-4 ADAM.. JUN"}} diff --git a/andrefoo_ip_master/authorship.json b/andrefoo_ip_master/authorship.json index 7a7d6ef2..ed08f20b 100644 --- a/andrefoo_ip_master/authorship.json +++ b/andrefoo_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/dre.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"T| |something","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"D|X|something|2023-12-31","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"E| |something else|1000-01-01|1000-10-10","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"andrefoo":3}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" public Deadline(String task, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" return \"D|\" + super.fileSaveFormat() + \"|\" + by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDate(by) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" private String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" return date.format(formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":26}},{"path":"src/main/java/Dre.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.io.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"public class Dre {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" private List\u003cTask\u003e list;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" private final String dataFilePath \u003d \"./data/dre.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" public Dre() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" loadTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" private LocalDate parseDate(String dateString) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"); // adjust format","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" return LocalDate.parse(dateString, inputFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" public void saveTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(dataFilePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" for (Task task : list) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" // Write task details to the file","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" writer.write(task.fileSaveFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" writer.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Error saving tasks to the file.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" public void loadTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" File file \u003d new File(dataFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(dataFilePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" String line;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" parseTask(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Error reading tasks from file.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"No saved tasks found.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" } catch (SecurityException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Access to file is denied.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" private void parseTask(String line) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" String type \u003d line.substring(0, 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" boolean isDone \u003d line.charAt(2) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" String[] todoInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" task \u003d new ToDo(todoInfo[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":"// description \u003d description.substring(0, description.indexOf(\u0027(\u0027) - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":"// String additionalInfo \u003d line.substring(line.indexOf(\u0027(\u0027) + 1, line.indexOf(\u0027)\u0027));","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":"// String[] deadlineInfo \u003d additionalInfo.split(\": \");","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":"// LocalDate byDate \u003d parseDate(deadlineInfo[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":"// task \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":"// break;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" String[] deadlineInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" System.out.println(Arrays.toString(deadlineInfo));","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" description \u003d deadlineInfo[2].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" LocalDate byDate \u003d parseDate(deadlineInfo[3].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":" task \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":"// description \u003d description.substring(0, description.indexOf(\u0027(\u0027) - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"andrefoo"},"content":"// String addInfo \u003d line.substring(line.indexOf(\u0027(\u0027) + 1, line.indexOf(\u0027)\u0027));","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"andrefoo"},"content":"// String[] eventInfo \u003d addInfo.split(\":\");","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"andrefoo"},"content":"// LocalDate fromDate \u003d parseDate(eventInfo[1].substring(0, eventInfo[1].length() - 2).trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"andrefoo"},"content":"// LocalDate toDate \u003d parseDate(eventInfo[2].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"andrefoo"},"content":"// task \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"andrefoo"},"content":"// break;","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"andrefoo"},"content":" String[] eventInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"andrefoo"},"content":" description \u003d eventInfo[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"andrefoo"},"content":" LocalDate fromDate \u003d parseDate(eventInfo[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"andrefoo"},"content":" LocalDate toDate \u003d parseDate(eventInfo[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"andrefoo"},"content":" task \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"andrefoo"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"andrefoo"},"content":" if (isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"andrefoo"},"content":" task.done();","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"andrefoo"},"content":" list.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"andrefoo"},"content":" public void greet() {","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Hello! I\u0027m Dre\");","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"andrefoo"},"content":" public void exit() {","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"andrefoo"},"content":" public void add(String next) {","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"andrefoo"},"content":" if (next.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"andrefoo"},"content":" String desc \u003d next.substring(4).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"andrefoo"},"content":" if (desc.isBlank()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"andrefoo"},"content":" return;","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"andrefoo"},"content":" ToDo task \u003d new ToDo(desc);","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"andrefoo"},"content":" list.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"andrefoo"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":131,"author":{"gitId":"andrefoo"},"content":" } else if (next.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"andrefoo"},"content":" String desc \u003d next.substring(8, next.indexOf(\"/by\") - 1).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"andrefoo"},"content":" String by \u003d next.substring(next.indexOf(\"/by\") + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"andrefoo"},"content":" if (desc.isBlank()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"andrefoo"},"content":" return;","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"andrefoo"},"content":" LocalDate byDate \u003d parseDate(by);","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"andrefoo"},"content":" Deadline task \u003d new Deadline(desc, byDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"andrefoo"},"content":" list.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"andrefoo"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"andrefoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! Invalid date format for deadline. Use this format: yyyy-mm-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":147,"author":{"gitId":"andrefoo"},"content":" } else if (next.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"andrefoo"},"content":" String desc \u003d next.substring(5, next.indexOf(\"/from\") - 1).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":149,"author":{"gitId":"andrefoo"},"content":" String from \u003d next.substring(next.indexOf(\"/from\") + 6, next.indexOf(\"/to\") - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"andrefoo"},"content":" String to \u003d next.substring(next.indexOf(\"/to\") + 4);","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"andrefoo"},"content":" if (desc.isBlank()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"andrefoo"},"content":" return;","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":156,"author":{"gitId":"andrefoo"},"content":" LocalDate fromDate \u003d parseDate(from);","lastModifiedDate":"2023-09-01"},{"lineNumber":157,"author":{"gitId":"andrefoo"},"content":" LocalDate toDate \u003d parseDate(to);","lastModifiedDate":"2023-09-01"},{"lineNumber":158,"author":{"gitId":"andrefoo"},"content":" Event task \u003d new Event(desc, fromDate, toDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":159,"author":{"gitId":"andrefoo"},"content":" list.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"andrefoo"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"andrefoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":163,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! Invalid date format for event. Use this format: yyyy-mm-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":164,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":165,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":166,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":167,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":168,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":169,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":170,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":171,"author":{"gitId":"andrefoo"},"content":" public void list() {","lastModifiedDate":"2023-08-24"},{"lineNumber":172,"author":{"gitId":"andrefoo"},"content":" for(int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":173,"author":{"gitId":"andrefoo"},"content":" System.out.println((i + 1) + \". \" + list.get(i).toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":174,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":175,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":176,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":177,"author":{"gitId":"andrefoo"},"content":" public void mark(String next) {","lastModifiedDate":"2023-08-24"},{"lineNumber":178,"author":{"gitId":"andrefoo"},"content":" int start \u003d next.lastIndexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-24"},{"lineNumber":179,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":180,"author":{"gitId":"andrefoo"},"content":" int taskIndex \u003d Integer.parseInt(next.substring(start + 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":181,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":182,"author":{"gitId":"andrefoo"},"content":" if (taskIndex \u003c\u003d 0 || taskIndex \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":183,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":184,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":185,"author":{"gitId":"andrefoo"},"content":" Task currTask \u003d list.get(taskIndex - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":186,"author":{"gitId":"andrefoo"},"content":" currTask.done();","lastModifiedDate":"2023-08-24"},{"lineNumber":187,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":188,"author":{"gitId":"andrefoo"},"content":" System.out.println(currTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":189,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":190,"author":{"gitId":"andrefoo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":191,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid input. Task index must be an integer.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":192,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":193,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":194,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":195,"author":{"gitId":"andrefoo"},"content":" public void unmark (String next) {","lastModifiedDate":"2023-08-24"},{"lineNumber":196,"author":{"gitId":"andrefoo"},"content":" int start \u003d next.lastIndexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-24"},{"lineNumber":197,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":198,"author":{"gitId":"andrefoo"},"content":" int taskIndex \u003d Integer.parseInt(next.substring(start + 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":199,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":200,"author":{"gitId":"andrefoo"},"content":" if (taskIndex \u003c\u003d 0 || taskIndex \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":201,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":202,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":203,"author":{"gitId":"andrefoo"},"content":" Task currTask \u003d list.get(taskIndex - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":204,"author":{"gitId":"andrefoo"},"content":" currTask.done();","lastModifiedDate":"2023-08-24"},{"lineNumber":205,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Ok! I\u0027ve marked this task as undone:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":206,"author":{"gitId":"andrefoo"},"content":" System.out.println(currTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":207,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":208,"author":{"gitId":"andrefoo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":209,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid input. Task index must be an integer.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":210,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":211,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":212,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":213,"author":{"gitId":"andrefoo"},"content":" public void delete(String next) {","lastModifiedDate":"2023-08-26"},{"lineNumber":214,"author":{"gitId":"andrefoo"},"content":" int start \u003d next.lastIndexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-26"},{"lineNumber":215,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":216,"author":{"gitId":"andrefoo"},"content":" int taskIndex \u003d Integer.parseInt(next.substring(start + 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":217,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":218,"author":{"gitId":"andrefoo"},"content":" if (taskIndex \u003c\u003d 0 || taskIndex \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":219,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":220,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":221,"author":{"gitId":"andrefoo"},"content":" Task deletedTask \u003d list.remove(taskIndex - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":222,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Task deleted:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":223,"author":{"gitId":"andrefoo"},"content":" System.out.println(deletedTask.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":224,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":225,"author":{"gitId":"andrefoo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":226,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid input. Task index must be an integer.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":227,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":228,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":229,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":230,"author":{"gitId":"andrefoo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":231,"author":{"gitId":"andrefoo"},"content":" Dre dre \u003d new Dre();","lastModifiedDate":"2023-08-24"},{"lineNumber":232,"author":{"gitId":"andrefoo"},"content":" dre.greet();","lastModifiedDate":"2023-08-24"},{"lineNumber":233,"author":{"gitId":"andrefoo"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":234,"author":{"gitId":"andrefoo"},"content":" String next \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":235,"author":{"gitId":"andrefoo"},"content":" while (!next.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":236,"author":{"gitId":"andrefoo"},"content":" if (next.equals(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":237,"author":{"gitId":"andrefoo"},"content":" dre.list();","lastModifiedDate":"2023-08-24"},{"lineNumber":238,"author":{"gitId":"andrefoo"},"content":" } else if (next.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":239,"author":{"gitId":"andrefoo"},"content":" dre.mark(next);","lastModifiedDate":"2023-08-24"},{"lineNumber":240,"author":{"gitId":"andrefoo"},"content":" } else if (next.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":241,"author":{"gitId":"andrefoo"},"content":" dre.unmark(next);","lastModifiedDate":"2023-08-24"},{"lineNumber":242,"author":{"gitId":"andrefoo"},"content":" } else if (next.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":243,"author":{"gitId":"andrefoo"},"content":" dre.delete(next);","lastModifiedDate":"2023-08-26"},{"lineNumber":244,"author":{"gitId":"andrefoo"},"content":" } else if (!next.trim().isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":245,"author":{"gitId":"andrefoo"},"content":" dre.add(next);","lastModifiedDate":"2023-08-24"},{"lineNumber":246,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":247,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid input.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":248,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":249,"author":{"gitId":"andrefoo"},"content":" next \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":250,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":251,"author":{"gitId":"andrefoo"},"content":" sc.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":252,"author":{"gitId":"andrefoo"},"content":" dre.saveTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":253,"author":{"gitId":"andrefoo"},"content":" dre.exit();","lastModifiedDate":"2023-08-24"},{"lineNumber":254,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":255,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":255}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" private LocalDate from;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" private LocalDate to;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" public Event(String task, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" return \"E|\" + super.fileSaveFormat() + \"|\" + from.format(formatter) + \"|\" + to.format(formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatDate(from) + \" to: \" + formatDate(to) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" private String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" return date.format(formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":29}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" private String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" private boolean done;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" private LocalDate deadlineDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" public Task() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" task \u003d \"default\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" public Task(String newTask){","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" task \u003d newTask;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" return done;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" public void done() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" public void undo() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" return (done ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" return getStatusIcon() + \"|\" + task;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" return \"[\" + getStatusIcon() + \"] \" + task;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":41}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":" public ToDo(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" return \"T|\" + super.fileSaveFormat();","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":13}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"todo one","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"deadline two /by time","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"event three /from now /to later","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"andrefoo":6}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"java -classpath ..\\bin Dre \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andrefoo":1,"-":20}}] +[{"path":"data/dre.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"T| |something","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"D|X|something|2023-12-31","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"E| |something else|1000-01-01|1000-10-10","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"andrefoo":3}},{"path":"src/main/java/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":" private final Task task;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" public AddCommand(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" this.task \u003d task;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" tasks.addTask(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" ui.showAddedTask(task, tasks.size());","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":13}},{"path":"src/main/java/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage) throws DreException;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" return false;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":8}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" public Deadline(String task, LocalDate by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" return \"D|\" + super.fileSaveFormat() + \"|\" + by.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" return \"[D]\" + super.toString() + \" (by: \" + formatDate(by) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" private String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" return date.format(formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":26}},{"path":"src/main/java/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":" private final int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" ui.showDeletedTask(tasks.getTask(index));","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" tasks.deleteTask(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":17}},{"path":"src/main/java/Dre.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.io.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"import java.util.List;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"public class Dre {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" private final List\u003cTask\u003e list;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" private final String dataFilePath \u003d \"./data/dre.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" public Dre() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" loadTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" private LocalDate parseDate(String dateString) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"); // adjust format","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" return LocalDate.parse(dateString, inputFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" public void saveTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(dataFilePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" for (Task task : list) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" // Write task details to the file","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" writer.write(task.fileSaveFormat());","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" writer.newLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Error saving tasks to the file.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" public void loadTasks() {","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" File file \u003d new File(dataFilePath);","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" if (file.exists()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(dataFilePath))) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" String line;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" parseTask(line);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Error reading tasks from file.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"No saved tasks found.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" } catch (SecurityException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Access to file is denied.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" private void parseTask(String line) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" String type \u003d line.substring(0, 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" boolean isDone \u003d line.charAt(2) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" String description;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" switch (type) {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" String[] todoInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" task \u003d new ToDo(todoInfo[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" String[] deadlineInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" System.out.println(Arrays.toString(deadlineInfo));","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" description \u003d deadlineInfo[2].trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" LocalDate byDate \u003d parseDate(deadlineInfo[3].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" task \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" String[] eventInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" description \u003d eventInfo[2];","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":" LocalDate fromDate \u003d parseDate(eventInfo[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"andrefoo"},"content":" LocalDate toDate \u003d parseDate(eventInfo[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"andrefoo"},"content":" task \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"andrefoo"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"andrefoo"},"content":" if (isDone) {","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"andrefoo"},"content":" task.done();","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"andrefoo"},"content":" list.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":93,"author":{"gitId":"andrefoo"},"content":" public void greet() {","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Hello! I\u0027m Dre\");","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"andrefoo"},"content":" public void exit() {","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"andrefoo"},"content":" public void add(String next) {","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"andrefoo"},"content":" if (next.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"andrefoo"},"content":" String desc \u003d next.substring(4).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"andrefoo"},"content":" if (desc.isBlank()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"andrefoo"},"content":" return;","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"andrefoo"},"content":" ToDo task \u003d new ToDo(desc);","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"andrefoo"},"content":" list.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"andrefoo"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"andrefoo"},"content":" } else if (next.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"andrefoo"},"content":" String desc \u003d next.substring(8, next.indexOf(\"/by\") - 1).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"andrefoo"},"content":" String by \u003d next.substring(next.indexOf(\"/by\") + 4);","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"andrefoo"},"content":" if (desc.isBlank()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"andrefoo"},"content":" return;","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"andrefoo"},"content":" LocalDate byDate \u003d parseDate(by);","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"andrefoo"},"content":" Deadline task \u003d new Deadline(desc, byDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"andrefoo"},"content":" list.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"andrefoo"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"andrefoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! Invalid date format for deadline. Use this format: yyyy-mm-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"andrefoo"},"content":" } else if (next.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"andrefoo"},"content":" String desc \u003d next.substring(5, next.indexOf(\"/from\") - 1).trim();","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"andrefoo"},"content":" String from \u003d next.substring(next.indexOf(\"/from\") + 6, next.indexOf(\"/to\") - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":137,"author":{"gitId":"andrefoo"},"content":" String to \u003d next.substring(next.indexOf(\"/to\") + 4);","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"andrefoo"},"content":" if (desc.isBlank()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"andrefoo"},"content":" return;","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"andrefoo"},"content":" LocalDate fromDate \u003d parseDate(from);","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"andrefoo"},"content":" LocalDate toDate \u003d parseDate(to);","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"andrefoo"},"content":" Event task \u003d new Event(desc, fromDate, toDate);","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"andrefoo"},"content":" list.add(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":148,"author":{"gitId":"andrefoo"},"content":" System.out.println(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":149,"author":{"gitId":"andrefoo"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":150,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! Invalid date format for event. Use this format: yyyy-mm-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":151,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":152,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":155,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Now you have \" + list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":156,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":157,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":158,"author":{"gitId":"andrefoo"},"content":" public void list() {","lastModifiedDate":"2023-08-24"},{"lineNumber":159,"author":{"gitId":"andrefoo"},"content":" for(int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":160,"author":{"gitId":"andrefoo"},"content":" System.out.println((i + 1) + \". \" + list.get(i).toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":161,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":162,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":163,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":164,"author":{"gitId":"andrefoo"},"content":" public void mark(String next) {","lastModifiedDate":"2023-08-24"},{"lineNumber":165,"author":{"gitId":"andrefoo"},"content":" int start \u003d next.lastIndexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-24"},{"lineNumber":166,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":167,"author":{"gitId":"andrefoo"},"content":" int taskIndex \u003d Integer.parseInt(next.substring(start + 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":168,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"andrefoo"},"content":" if (taskIndex \u003c\u003d 0 || taskIndex \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":171,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":172,"author":{"gitId":"andrefoo"},"content":" Task currTask \u003d list.get(taskIndex - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":173,"author":{"gitId":"andrefoo"},"content":" currTask.done();","lastModifiedDate":"2023-08-24"},{"lineNumber":174,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":175,"author":{"gitId":"andrefoo"},"content":" System.out.println(currTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":176,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":177,"author":{"gitId":"andrefoo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":178,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid input. Task index must be an integer.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":179,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":180,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":181,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":182,"author":{"gitId":"andrefoo"},"content":" public void unmark (String next) {","lastModifiedDate":"2023-08-24"},{"lineNumber":183,"author":{"gitId":"andrefoo"},"content":" int start \u003d next.lastIndexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-24"},{"lineNumber":184,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":185,"author":{"gitId":"andrefoo"},"content":" int taskIndex \u003d Integer.parseInt(next.substring(start + 1));","lastModifiedDate":"2023-08-24"},{"lineNumber":186,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":187,"author":{"gitId":"andrefoo"},"content":" if (taskIndex \u003c\u003d 0 || taskIndex \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":188,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":189,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":190,"author":{"gitId":"andrefoo"},"content":" Task currTask \u003d list.get(taskIndex - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":191,"author":{"gitId":"andrefoo"},"content":" currTask.done();","lastModifiedDate":"2023-08-24"},{"lineNumber":192,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Ok! I\u0027ve marked this task as undone:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":193,"author":{"gitId":"andrefoo"},"content":" System.out.println(currTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":194,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":195,"author":{"gitId":"andrefoo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":196,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid input. Task index must be an integer.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":197,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":198,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":199,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":200,"author":{"gitId":"andrefoo"},"content":" public void delete(String next) {","lastModifiedDate":"2023-08-26"},{"lineNumber":201,"author":{"gitId":"andrefoo"},"content":" int start \u003d next.lastIndexOf(\u0027 \u0027);","lastModifiedDate":"2023-08-26"},{"lineNumber":202,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":203,"author":{"gitId":"andrefoo"},"content":" int taskIndex \u003d Integer.parseInt(next.substring(start + 1));","lastModifiedDate":"2023-08-26"},{"lineNumber":204,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":205,"author":{"gitId":"andrefoo"},"content":" if (taskIndex \u003c\u003d 0 || taskIndex \u003e list.size()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":206,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid task index.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":207,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":208,"author":{"gitId":"andrefoo"},"content":" Task deletedTask \u003d list.remove(taskIndex - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":209,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Task deleted:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":210,"author":{"gitId":"andrefoo"},"content":" System.out.println(deletedTask.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":211,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":212,"author":{"gitId":"andrefoo"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":213,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid input. Task index must be an integer.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":214,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":215,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":216,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":217,"author":{"gitId":"andrefoo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-24"},{"lineNumber":218,"author":{"gitId":"andrefoo"},"content":" Dre dre \u003d new Dre();","lastModifiedDate":"2023-08-24"},{"lineNumber":219,"author":{"gitId":"andrefoo"},"content":" dre.greet();","lastModifiedDate":"2023-08-24"},{"lineNumber":220,"author":{"gitId":"andrefoo"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":221,"author":{"gitId":"andrefoo"},"content":" String next \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":222,"author":{"gitId":"andrefoo"},"content":" while (!next.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":223,"author":{"gitId":"andrefoo"},"content":" if (next.equals(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":224,"author":{"gitId":"andrefoo"},"content":" dre.list();","lastModifiedDate":"2023-08-24"},{"lineNumber":225,"author":{"gitId":"andrefoo"},"content":" } else if (next.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":226,"author":{"gitId":"andrefoo"},"content":" dre.mark(next);","lastModifiedDate":"2023-08-24"},{"lineNumber":227,"author":{"gitId":"andrefoo"},"content":" } else if (next.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":228,"author":{"gitId":"andrefoo"},"content":" dre.unmark(next);","lastModifiedDate":"2023-08-24"},{"lineNumber":229,"author":{"gitId":"andrefoo"},"content":" } else if (next.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":230,"author":{"gitId":"andrefoo"},"content":" dre.delete(next);","lastModifiedDate":"2023-08-26"},{"lineNumber":231,"author":{"gitId":"andrefoo"},"content":" } else if (!next.trim().isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":232,"author":{"gitId":"andrefoo"},"content":" dre.add(next);","lastModifiedDate":"2023-08-24"},{"lineNumber":233,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":234,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Invalid input.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":235,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":236,"author":{"gitId":"andrefoo"},"content":" next \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":237,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":238,"author":{"gitId":"andrefoo"},"content":" sc.close();","lastModifiedDate":"2023-08-24"},{"lineNumber":239,"author":{"gitId":"andrefoo"},"content":" dre.saveTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":240,"author":{"gitId":"andrefoo"},"content":" dre.exit();","lastModifiedDate":"2023-08-24"},{"lineNumber":241,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":242,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":242}},{"path":"src/main/java/DreException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"public class DreException extends Exception {","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":" public DreException(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":" super(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":5}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" private LocalDate from;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" private LocalDate to;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" public Event(String task, LocalDate from, LocalDate to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" return \"E|\" + super.fileSaveFormat() + \"|\" + from.format(formatter) + \"|\" + to.format(formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" return \"[E]\" + super.toString() + \" (from: \" + formatDate(from) + \" to: \" + formatDate(to) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" private String formatDate(LocalDate date) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" return date.format(formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":29}},{"path":"src/main/java/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" return true;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":12}},{"path":"src/main/java/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" ui.showTasks(tasks);","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":10}},{"path":"src/main/java/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":" private final int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" tasks.mark(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" ui.showMarkedTask(tasks.getTask(index));","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" ui.showError(\"Invalid task index.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":17}},{"path":"src/main/java/NewDre.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"public class NewDre {","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":" private Storage storage;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" private TaskList tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" private Ui ui;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" public NewDre(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" tasks \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" public void run() {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" ui.showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" } finally {","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" ui.showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" new NewDre(\"data/dre.txt\").run();","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":40}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"public class Parser {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" //may return a null.","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" public static Task parseTask(String line) {","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" String type \u003d line.substring(0, 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" boolean isDone \u003d line.charAt(2) \u003d\u003d \u0027X\u0027;","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" String description;","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" switch (type) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" case \"T\":","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" String[] todoInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" task \u003d new ToDo(todoInfo[2]);","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" case \"D\":","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" String[] deadlineInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" System.out.println(Arrays.toString(deadlineInfo));","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" description \u003d deadlineInfo[2].trim();","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" LocalDate byDate \u003d parseDate(deadlineInfo[3].trim());","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" task \u003d new Deadline(description, byDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" break;","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" case \"E\":","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" String[] eventInfo \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" description \u003d eventInfo[2];","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" LocalDate fromDate \u003d parseDate(eventInfo[3]);","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" LocalDate toDate \u003d parseDate(eventInfo[4]);","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" task \u003d new Event(description, fromDate, toDate);","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" if (isDone) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" task.done();","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" return task; //instead of adding to list, just return the task.","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" private static LocalDate parseDate(String dateString) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\"); // adjust format","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" return LocalDate.parse(dateString, inputFormatter);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" public static Command parse(String input) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" String[] words \u003d input.split(\" \", 2); // split command from the rest of the input","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" String commandWord \u003d words[0];","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" switch (commandWord) {","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" case \"bye\":","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" case \"list\":","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" case \"mark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the task index to mark.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" return new MarkCommand(Integer.parseInt(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the task index to unmark.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":" return new UnmarkCommand(Integer.parseInt(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" case \"delete\":","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2) {","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Please specify the task index to delete.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":69,"author":{"gitId":"andrefoo"},"content":" return new DeleteCommand(Integer.parseInt(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":70,"author":{"gitId":"andrefoo"},"content":" case \"todo\":","lastModifiedDate":"2023-09-04"},{"lineNumber":71,"author":{"gitId":"andrefoo"},"content":" if (words.length \u003c 2 || words[1].trim().isEmpty()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":72,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":73,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":74,"author":{"gitId":"andrefoo"},"content":" return new AddCommand(new ToDo(words[1].trim()));","lastModifiedDate":"2023-09-04"},{"lineNumber":75,"author":{"gitId":"andrefoo"},"content":" // ... other commands like deadline, event etc.","lastModifiedDate":"2023-09-04"},{"lineNumber":76,"author":{"gitId":"andrefoo"},"content":" default:","lastModifiedDate":"2023-09-04"},{"lineNumber":77,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-04"},{"lineNumber":78,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":79,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":80,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":80}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.io.*;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"public class Storage {","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" private final String dataFilePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" this.dataFilePath \u003d filePath;","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" public List\u003cTask\u003e load() {","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" List\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" File file \u003d new File(dataFilePath);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" if (file.exists()) {","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" try (BufferedReader reader \u003d new BufferedReader(new FileReader(dataFilePath))) {","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" String line;","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" while ((line \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" Task task \u003d Parser.parseTask(line);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" if (task !\u003d null) list.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" } else {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"No saved tasks found.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" } catch (IOException | SecurityException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":"// throw new DukeException(\"Error loading tasks from the file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" return list;","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" public void save(List\u003cTask\u003e list) {","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" try (BufferedWriter writer \u003d new BufferedWriter(new FileWriter(dataFilePath))) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" for (Task task : list) {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" writer.write(task.fileSaveFormat());","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" writer.newLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Error saving tasks to the file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":45}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" private String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" private boolean done;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" private LocalDate deadlineDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" public Task() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" task \u003d \"default\";","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" public Task(String newTask){","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" task \u003d newTask;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" return done;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" public void done() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" public void undo() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" return (done ? \"X\" : \" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" return getStatusIcon() + \"|\" + task;","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" return \"[\" + getStatusIcon() + \"] \" + task;","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":41}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"import java.util.List;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"public class TaskList {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" private final List\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" public TaskList() {","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" this.tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" public TaskList(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" public void add(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" // Delete task from the list by index","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" public Task delete(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" return tasks.remove(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" // Mark task as done by index","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" public void mark(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" Task task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":" task.done();","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid task index.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" // Unmark task by index","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" public void unmark(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" Task task \u003d tasks.get(index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" task.undo();","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid task index.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":" public Task getTask(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" return tasks.get(index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid task index.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" public void deleteTask(int index) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" tasks.remove(index - 1);","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" throw new DreException(\"Invalid task index.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":62,"author":{"gitId":"andrefoo"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":63,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":64,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":65,"author":{"gitId":"andrefoo"},"content":" public int size() {","lastModifiedDate":"2023-09-04"},{"lineNumber":66,"author":{"gitId":"andrefoo"},"content":" return tasks.size();","lastModifiedDate":"2023-09-04"},{"lineNumber":67,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":68,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":68}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":" public ToDo(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" public String fileSaveFormat() {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" return \"T|\" + super.fileSaveFormat();","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"andrefoo":13}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"public class Ui {","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" public void showLoadingError() {","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Error reading tasks from file.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" public void showError(String message) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" public void showLine() {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-04"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":19,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Hello! I\u0027m Dre\");","lastModifiedDate":"2023-09-04"},{"lineNumber":20,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-09-04"},{"lineNumber":21,"author":{"gitId":"andrefoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":22,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":23,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":24,"author":{"gitId":"andrefoo"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-09-04"},{"lineNumber":25,"author":{"gitId":"andrefoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":26,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-04"},{"lineNumber":27,"author":{"gitId":"andrefoo"},"content":" showLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":28,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":29,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":30,"author":{"gitId":"andrefoo"},"content":" public void showTasks(TaskList tasks) throws DreException {","lastModifiedDate":"2023-09-04"},{"lineNumber":31,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":32,"author":{"gitId":"andrefoo"},"content":" for (int i \u003d 1; i \u003c\u003d tasks.size(); i++) {","lastModifiedDate":"2023-09-04"},{"lineNumber":33,"author":{"gitId":"andrefoo"},"content":" System.out.println((i) + \". \" + tasks.getTask(i));","lastModifiedDate":"2023-09-04"},{"lineNumber":34,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":35,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":36,"author":{"gitId":"andrefoo"},"content":" public void showUnmarkedTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":37,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Ok! I\u0027ve marked this task as undone:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":38,"author":{"gitId":"andrefoo"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":39,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":40,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":41,"author":{"gitId":"andrefoo"},"content":" public void showDeletedTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":42,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Task deleted:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":43,"author":{"gitId":"andrefoo"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":44,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":45,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":46,"author":{"gitId":"andrefoo"},"content":" public void showAddedTask(Task task, int totalTasks) {","lastModifiedDate":"2023-09-04"},{"lineNumber":47,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":48,"author":{"gitId":"andrefoo"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":49,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Now you have \" + totalTasks + \" tasks in the list.\");","lastModifiedDate":"2023-09-04"},{"lineNumber":50,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":51,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":52,"author":{"gitId":"andrefoo"},"content":" public void showMarkedTask(Task task) {","lastModifiedDate":"2023-09-04"},{"lineNumber":53,"author":{"gitId":"andrefoo"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-04"},{"lineNumber":54,"author":{"gitId":"andrefoo"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-04"},{"lineNumber":55,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":56,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":57,"author":{"gitId":"andrefoo"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-04"},{"lineNumber":58,"author":{"gitId":"andrefoo"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-04"},{"lineNumber":59,"author":{"gitId":"andrefoo"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-04"},{"lineNumber":60,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":61,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":61}},{"path":"src/main/java/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-04"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":" private final int index;","lastModifiedDate":"2023-09-04"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-04"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-04"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":7,"author":{"gitId":"andrefoo"},"content":"","lastModifiedDate":"2023-09-04"},{"lineNumber":8,"author":{"gitId":"andrefoo"},"content":" @Override","lastModifiedDate":"2023-09-04"},{"lineNumber":9,"author":{"gitId":"andrefoo"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-04"},{"lineNumber":10,"author":{"gitId":"andrefoo"},"content":" try {","lastModifiedDate":"2023-09-04"},{"lineNumber":11,"author":{"gitId":"andrefoo"},"content":" tasks.unmark(index);","lastModifiedDate":"2023-09-04"},{"lineNumber":12,"author":{"gitId":"andrefoo"},"content":" ui.showMarkedTask(tasks.getTask(index));","lastModifiedDate":"2023-09-04"},{"lineNumber":13,"author":{"gitId":"andrefoo"},"content":" } catch (DreException e) {","lastModifiedDate":"2023-09-04"},{"lineNumber":14,"author":{"gitId":"andrefoo"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-04"},{"lineNumber":15,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":16,"author":{"gitId":"andrefoo"},"content":" }","lastModifiedDate":"2023-09-04"},{"lineNumber":17,"author":{"gitId":"andrefoo"},"content":"}","lastModifiedDate":"2023-09-04"}],"authorContributionMap":{"andrefoo":17}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"andrefoo"},"content":"todo one","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"andrefoo"},"content":"deadline two /by time","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"andrefoo"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"andrefoo"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"andrefoo"},"content":"event three /from now /to later","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"andrefoo"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"andrefoo":6}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"andrefoo"},"content":"java -classpath ..\\bin Dre \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"andrefoo":1,"-":20}}] diff --git a/andrefoo_ip_master/commits.json b/andrefoo_ip_master/commits.json index a6b9ab7e..37cf0a02 100644 --- a/andrefoo_ip_master/commits.json +++ b/andrefoo_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"andrefoo":[{"date":"2023-08-24","commitResults":[{"hash":"ac8880ee77d6b73175774bc210526b3bbd85ce69","isMergeCommit":false,"messageTitle":"Level-0 Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":10}}},{"hash":"65f876dfc5284e4cb9fa5ba347ec43964cbecd00","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"6f191606b51b7d02c265310712191fa488b243c9","isMergeCommit":false,"messageTitle":"Level-2 Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"b9e0b92108a3167edab97d903855a0ca5a69a5b1","isMergeCommit":false,"messageTitle":"Level-3 and 4 Mark as Done ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":16}}}]},{"date":"2023-08-26","commitResults":[{"hash":"06691695f0cda637b12705f2d0a9889cf982b490","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text Ui Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"3f8e2fdbcdedda84bf34c7d609c891dd1acbdc3f","isMergeCommit":false,"messageTitle":"Level 5: Error Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":21}}},{"hash":"413cd754292bf363fa65cb5fc5eb4c6c5b6bd106","isMergeCommit":false,"messageTitle":"Level 6: Support Delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a21646be2ab0d7f258980bfda7a686bcb5f7a7d7","isMergeCommit":false,"messageTitle":"Update Dre.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":10}}},{"hash":"6b4cf749f39efb1daad92d2bce805868c0f0f90d","isMergeCommit":false,"messageTitle":"Level 7: Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":1}}},{"hash":"7e770d3d41da27060aaf07cf4e71b97fc0a8e429","isMergeCommit":false,"messageTitle":"Level 7: Save","messageBody":"","tags":["Level-7-samplesave"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"4608cc34dc037908e79292253502d581fde07987","isMergeCommit":false,"messageTitle":"Add date feature","messageBody":"Deadline and Event date stored in LocalDate format\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":111,"deletions":48}}}]}]},"authorFileTypeContributionMap":{"andrefoo":{"java":364,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":9}},"authorContributionVariance":{"andrefoo":5015.7954},"authorDisplayNameMap":{"andrefoo":"CS2103T-W12-4 ANDR.. JIE"}} +{"authorDailyContributionsMap":{"andrefoo":[{"date":"2023-08-24","commitResults":[{"hash":"ac8880ee77d6b73175774bc210526b3bbd85ce69","isMergeCommit":false,"messageTitle":"Level-0 Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":10}}},{"hash":"65f876dfc5284e4cb9fa5ba347ec43964cbecd00","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":13,"deletions":1}}},{"hash":"6f191606b51b7d02c265310712191fa488b243c9","isMergeCommit":false,"messageTitle":"Level-2 Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":27,"deletions":6}}},{"hash":"b9e0b92108a3167edab97d903855a0ca5a69a5b1","isMergeCommit":false,"messageTitle":"Level-3 and 4 Mark as Done ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":130,"deletions":16}}}]},{"date":"2023-08-26","commitResults":[{"hash":"06691695f0cda637b12705f2d0a9889cf982b490","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text Ui Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"bat":{"insertions":1,"deletions":1}}},{"hash":"3f8e2fdbcdedda84bf34c7d609c891dd1acbdc3f","isMergeCommit":false,"messageTitle":"Level 5: Error Handling","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":70,"deletions":21}}},{"hash":"413cd754292bf363fa65cb5fc5eb4c6c5b6bd106","isMergeCommit":false,"messageTitle":"Level 6: Support Delete feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}}]},{"date":"2023-08-29","commitResults":[{"hash":"a21646be2ab0d7f258980bfda7a686bcb5f7a7d7","isMergeCommit":false,"messageTitle":"Update Dre.java","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":10}}},{"hash":"6b4cf749f39efb1daad92d2bce805868c0f0f90d","isMergeCommit":false,"messageTitle":"Level 7: Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":76,"deletions":1}}},{"hash":"7e770d3d41da27060aaf07cf4e71b97fc0a8e429","isMergeCommit":false,"messageTitle":"Level 7: Save","messageBody":"","tags":["Level-7-samplesave"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0}}}]},{"date":"2023-09-01","commitResults":[{"hash":"4608cc34dc037908e79292253502d581fde07987","isMergeCommit":false,"messageTitle":"Add date feature","messageBody":"Deadline and Event date stored in LocalDate format\n","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":4},"java":{"insertions":111,"deletions":48}}},{"hash":"e38faf5b8c04221b6b73ab2c305fc55e0815fe26","isMergeCommit":false,"messageTitle":"Delete comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":14}}}]},{"date":"2023-09-04","commitResults":[{"hash":"4a2dbabc1ea83406ac798c019c157d06be8619c2","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"Improved OOP in a more user oriented fashion.\nAdd Command classes\nAdd Ui class\nAdd Storage class\nAdd Parser class\nAdd TaskList class\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":393,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"andrefoo":{"java":744,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":9}},"authorContributionVariance":{"andrefoo":11248.607},"authorDisplayNameMap":{"andrefoo":"CS2103T-W12-4 ANDR.. JIE"}} diff --git a/archive.zip b/archive.zip index ca98f7f8899db51b92ccc84926b16d1afba22e03..30ef63dd52ee4b5fc40bd4242c0a49943198a91d 100644 GIT binary patch delta 1035905 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

UExK9%{7K(O~aBtk%5wDXk{(PRj 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

Z&c>T$lf2pItNPyeUo}&6 z>-=s{PuEOO-|BnLxt$)CQ_uGzp$apHlB@EWP7IvZ3Ma@t$h=-$`HlKGjTR5sS+G7M z`JIhO#g-t?74qKx&kk?~XEIS%K-1zy!FuQ&Ufqw7hGKRz&FXnXd=P4)y%Yi5^=rK*5zHA~j4@Izu} zX5x4{AlKT+Nw(NfC1IN9zSAA8DzrBZnr4_ln)vgNP92C?b^-`2x8R<>)iLyhTsAJ zi3bVihoU{!-nfflu=tqO zR#+L5drIOo-(+RM8O6+n;=ZsnHL2Q0{S+X*jY!YSO(T5Jck8o%CqBY+O7 zLRRNmDMbx;Cim@Z%b)e*I(&@XkaiRxS68ZsKwH@!g1hM5v^XFMJEeUdWzkAj1P_F? znv%-1636irypm}cUdosET3Cn+Hgp$RNgLKYu)xw24$2CdiI^sEx~ z$Eywhh1DR0fThg}gz!D+P=|?==sFU1V;U^(#3Um0AJm{!6tQ(0^(^FXitiu5-SDvT zJaQpU^+o44?d;hx#e*BIr+M52)4rDHunG4t;cnh%l@01)<%VI(Kxxr#ZvO`OR7<&a zFt2_J9A@FyO3Bw6(N2`LNn8$-bfNp4@<~I)Mauav%Ka8fa6a-$yEx}Pp`xXeX$X32NvG!9T%ytTbzDO{F`wb`uc!Y+a%cDgt!MP#T=N59AVnEaFf<@2 zC@7$B0bE2EB;{Z}z5h%TH~FDV zIsdKydbUDsS8;=~fc>}L699$$pL62;Ae7^Oi0~|wCjGyq>^CUm|K5?9Q3SOe1q^!X zKX{iJ`uRW4w^eaya@Bu{A6d{||9u$GBIxXYvb=WmW9W?k{2uGCp-mY6A!vBt1A+bp zr^GOKV&6gfT`wDI`?Up((|>z4bb-O+{s$xf#XwCbZ-&82_dP{GYwxXrQTfll5v3W1 zjOAa#w^<{4y4*1g9$;2WPX%`x*>ApneY1zeqEFD1)IF(*_Sp^F*8oNEaprLVLaO?z z&R4GU&uzO0I0tP=OGI{+A{vO*&zW-pzqiLTALz@QD*Ig__I@ut#_lqh%et!cYah+j z^1W#_&}MSq+NmXgA0w)(W?tI2>d(ZULeoom%)7CoOJTk46rjgj(-rg_rOu6>Vn`!} zoI5oYp5mM~Wh}i-Wm5}H_dDQ`Kinb&+hE}2=uW3*Ra&!b=Z;puVq32IOXs7a&e z0KK|b%};?o1$e$-TC}&fQwj<}V}{0MvZm4xPLhb5@hRZ&i=ahf6V#YG(^T}2R=+W! z`IDj5jcJN2f;cj!xXidH>eIyQSI^WcrrnzoIb*6NXIRllYq$)j#%oa{! zHXQ20?K#Wzla|;LJ=H`>F4Vp4<^mjAm4@NBj)t$lOuU^2J>$zS-t4DnL5&v~#KWsT zw=Je|Xn<)uC2w$J?g?tufP_P<+--7G{K_XgV(>-moQN2MY=aavFrD}EAS^>C;%>0v z7-;z9+avvfb@P&N+8L>q@ds1_0d3tA7QPYi@38I?cCZ2h5FiR=eod%J=4E@DBBOHX zW7{}U(pjijq>vMtc#CeYF2C7int{>@A#7wc$n=BL?;qi$ufT0+rl>E&82w6zlT0gC zQ)yGVDTOLCDGrkWlUZ*GB@=h~gs|)jw1E?;tsie!5CwXrb$xt54{A)B&s4n2kCT9H zAkWbW%8rbVlptUW0=D00E$q6t1B>jJF;a*dnhm@%vzD2}DA#44saW-7_z-F~H5 zn0l=PAZf0WRcW6imu9J#=1MK={H4d^rb=;Qs^>~L#V~wcDGBV8F_=_#6Ven!=*}$6 z3eaH%S6|dTg=2WFCc?3gU1Bt}6!_8(B|v7WA`<`_>k~erBwX3~gR`*E(f+j<=l6|(mYx0=&`HbAX9m!ka*z<#arvGGEO?JGI@t)J{AX z@Pc`->}`}^#))n#1|jqC20FSldV1YCAZ@gtCH3Wt=fa~fCG3!tXUSKDT9$P>$8MjS zqBC)%;G+!g)GpKN$kaQWbzs-}-J?I||1xY+A^3bD#z%6_;6VJM|EowY54=h35fuvH zxo6uEOf~81IMyVaBrEPa$wlg+Q!A0Vi?FN@B8ORH+4;g(X6QF3ES;ASq9KwXLbb>k zquMax0ks-E`+Gj>dvZ9%<6KxFxHNqZ=>-VBc7<$Nz&)r}2miKHEC;v5MI|0TxS>o- zS@1%VxgYGDq5+~%6m_g=+US)Y5^^(uS=TcE>5B;e<@mYClnaVjYtg5vL>;!Q$0M?b z+tZ|Tu%ecPqY|IM&Y9)$#+1+PFX)BK3?Ip>z${P^VeuzpC@W3Ger9Z8yImpJ#RkuCU>+?!(bt#-Hm7gUIPij(IGyubQ^*beneXQTtpB z?t7nky7jQ}5Pdr>uY1|abrA!AE|b9LlO8!lzy6jXMDv#rwf^%0eL*=Fc$S3a*}pSv z=O0=|BE+>DjVsmSZFU_0<)zYE&Asg#04~6z_4=lpfZ3O!=g5INI<8VPmvh($yZs+BH~|a#&se&B3<|CV_+Q`)1D6f*FTjR}3qt=Fmg$7B!vp z1P(oY=dU$fJLxXm<$noCCvdJZ|27F@hL8OZLFa~-r~ZeS8N)mLtAo;=NQ6+^&#mF% z|MR5&lMiqGpO1lQ4ZH{Gzr>w+c(VTrCeU?w2Ht;L{NfcxYnMPpp#86Ea>YXULGmxL zlLuiP;omxOHy&zxnH0k0e{Q=@00dTmoXZv$O7CsG&^cY@Z}^{_@wujYsiw-ffI(ApkLkD|)N5)F}^J$z2y&EHzzC zb(;zec=#V!xiiz&Ed9OM_#dw(DFwp|3zE*26x#|VII$9q`gBt_v~AU1YY6Iq^q=}k zsR+AdHoA$R5acP~F$l_vlTn|iZYZH>fvZ$o3hTQ2lMTyfRKq=^cb0*6u$Wx5-QT5< zM9&!ap~^Elt>%7)pCwW^vyaD*FRzx*TKRTUSyX)8$5X8@ham|-tVCzd;gx&jwNt7; zxKI3(Lr2)BmO4F0Fsiu3P`m^H`qcAl>h|X5vkOQ^> zf`L0e>+&cGkWD+1(i@%rbh$nnxL&$GzySUJ2U!KVM0!w4mgDG%SUW*V0-YXw^%Se4 zePfz4OhbOdN!sMO(e?$ZiVrPg2dIoQ02?^;fI1Xzs$iA-ZiXFmN|YENH@8@zDA0?X zk=3N|Q4=Mhc@^ z&%W5GhZnO2W;3**^VA@9)pBAtl3Su1TcoJ4cx}-Jub5=}hEGt>T!J}I&fm)MKKggo zrll2h1PGf!O+<^I`tZef1r#sCkmOohu1{XziA*cQJPI$_c^aoHcMZO`PTFt%a(a3_ z_1WOAa1JC4KIIDl7CL?79%D1}9deeaQ6yLKKJI#Twcy6Sim5N*g3h?PmBp#zA0k!H zQ58(itb3el-Hv=J!XjD`VA2Z%??;Mcb+$&W4eE;Q96E2|bz1!K%Z7s@plUs)r?hjW zI{mV%8`rBY_0s`9xhGp0TCyGMqq68g_$Rg<9^2?+p6L|;`#X>l#~@t7VCSiEzf7+- z%{eDwQ^RKGK!dEV`GLpq1w(yza)dxY%BY2< z0!~O@T?6CKmKS4A0<`Aalv{(yqAQ(Oq7+e4OYcMg*<7ARw>xiw?8)S{A#Y|$f&z|m z>&Em^kR+;UOH;&P(8LrZIP_%gk!>ZZB>A@B&o%|O;N(5P*F8^S9Az(k=FN}Nd?e>4 z4qjzS*en&7^WJ7lSkbOC;r&2~z!GC0jm4$=F4>f87fT%&HLb)3I%56A$23Z-J=L>g>r0C7(&!Js@`{zrFufQ@g?_Vdf z@^!eOVCu}1GZRo}1@ipNm(DltP7#Z{y8$1B|E|Xt z>CP(@5I{iOX#aaXPFDy;;7XT=r-lTWuc#}LLX)^P(%;6{ka9<|w54iKCU3OrGDKKL zH3$a;N1NJTy{v0&tZh(k+>C_+ZIC$%uwhvk%dcdVWC%d+l=lm~_`mBon2#s#Ht*UU zc*nV6ZpMxK`1Cej-d(=NME9fZdDYDq?>4vhS9;VZpVK4y%!m2#^F~qzdcFg6Zs%ed z@$UAnUiz+{!~+Rk1ThFL^qo)Nkl*Fvj3w@>2b{(kJm#)7mAUZn5S}3^-@_>n1gqox z*9~1M^y`N0lLq&HPeQ)$%I_sw;VW5fG-sa1U9H3WCLA@!9cBI*?c@Avk$&ATDB#cf zy)aId=hGARxbV5}3UKTZc?$u&wG0JI`y8Cgn=j34huFlq&yHEUq+x*Dl-~WSx70;FBa+rcjn6MR^hs$@&FZ`Xv}J#&8CA`auXJs#Pvdq6wk0=$F{(q<}iNeJL>{hGfqT; z*e%>+M47;88|0-NkiZXEL%T|f`1&g@xz3n}A0O-p1GH;|I#3+H33hu=|IE^X`hI}0 z5SLXYaX&gbh$L|(Zt1HulAFDo=Sk@2YSH|6cpXDK-&5hV7+P{s!Y)eX9$hXd95Y|s zm*QJqf57z1HAv2lgguwLkuYR`qcNv%sR=yI$ym9=@F?4x=8A$I;dcRj`XDeb(W<99!kO9QpkOqn3V#0}_|eM$!a8 zDA=tDqLPu&9yooKostoDx-op-mbDX%t>xxQ$Tfgy#!y5E5vp|`KC!wvHZ(kP&`oW6 zE!@1gl`Kc1fdO{+q{X+D?7yI&Y67XtPer1EFFQ2*Wo^dSZk#{<91X^2Up*{Cd~P5F z#=2~)YBdZmjP#!FZ6O2bTNaGHmREu0^A5`{eu!&ct8=?&BtMTPN>FYsmq^RCpDm`J z?Tg<5I-6CM5((?B8z87!(uSNkg`Bpb74bNg;D<&aO#yY41W0D(ccFqZ2fiEiCqq10 z+I0%$TcWs@Odq%RMsp(o^se?uz83urR&MLY+tOwWgPVHBq}Z8-^Yuo*g1M|eD!Nau zWd=ywIo=^&J|8#qKI8VmOmGAvf`j8YGu*Z(&$>UZLyI_IgAskvnyF74*(lx)nKA@S zGTYGu5VPkc-;;8QKZr>-J9;?ULTl+&wVR1}h zak2^zC0M!@2YdTu&W3EplSmM_s~IaQWE_9F?39yAB`-s?4q6;SNtp`~{*v?!LP?y- zWW3t>be|QyKWkybmPd}1_LsQ8HB^#>U|DwjH9+1%7^~W%0Y*l~Dm*k%Kq-q%Wx^ABH54kC=;jr+G`Za2 z1ZRlA+aPqCy;txqWZiH`Ezo4su8cnAG+?##OT-tKM7idrz@e;zq$o|beolm;LYNO} zpX&6N5s75eXR)enEiZw=gCos=QWKCIKXTi>2Hu=aB|Pri_GRVdTB>4X=rQrmzQv#` z4F>UEs|eZ%3D-vZPi3G2brjKa4S(veU`fydHE_nK-%|l`Z>1Z;p2Wr)pKn9r?f|~5 z27j?&b37DDkgiO97?Niz$$lhpuk}-BlRlKUQl^xGWZB!l4oyhXO7|BpWnmORkzo}2 zgaVeoJB|)xam0Wsg}O5N<^?*L*#brXf)GRksXPuscQkwbE*2g>3mC)9v^q+h*~BV^ ziFK`gTnawD<~0xZSb&h!v9VG*fCO}MNt%(i!qb(i0pCPW1ct^AH9QC6grecVZO#00 zOL^6@`KupFDB(4rFKcnf#|s^eY9(Xe7%BtJ6%0j|o(r^TVg6TzZWyn|n*;O|)OOGM zH3$wIq%LV3LUn*D6PkCw>_xW=kScy5ZhYz-&TESoLYL=w&fO1dcMg%pjSrBTsm&&6 z$d1%D)=O|n1p*Gjh1+Ec5ZPJ;q}lZ}xdF=UbZl2<9<#(fzSy$W1*QpoFq6h9u++!g z|EMe?0PrP60BL@Gk1Ym+!o4F(4}SG47r>-cf{LSq*v@Vl5Oi60i3MCd4HCs)uWjz-Y3< zKY1F&hSzT)nZI5Hzor=&0iE8DXUN?c-d)Z6ao{HA(Y@(6o~`g36VD$+=IuF7R|T-6}1;2?pqpUZW7@2wTl)) zcq7ZVBdOEpig{MF=Ls`tUP7H1t19c3QEijy%d-HcN|-%Y(~Y*E~6;b0w-cYAKpG#IjU@uH1$9=jvF9SiY!jV6a~0-rh9J!HDm^>NuT?xXsSgI z>ly%6XVdH=HIZofxNa|5oM(!v`!(eeo35<=;ry{`N&(twW(m)CT8ib%*sck7HZdPz zc-{@<3f%sd^aVkZqdhP3MPp+7Y}a4)6ZD|k0sChFJ^Rz%w0~|==TtdM{;?oYN3nx| z;=F-6Fe)InCKA8*B>y0t<{U2xS+QJ47BzYJc!@;w9@akq+DhpU(QJclv!;E?J$>kL zbrH5zcgJ{?O7s_LV{b+NHLLBSHk#B#`rqnH$^e;rFt#-2bv`R41f>o3H2!2i@i*t+ zxqpM1SALabFGAy!E7s1qOFxerH>;LWAuJjYzn=iWMhrSF2x@I{Ol5LfBx$s>(yofp z?=vmpJ^Q(kABvGO2$3v-p@HvGtUZa6fr2ih=JG$_jDW%9QKdgkfOux9U*m#=GuQ~pA#yrp z!9iMftg}>_Y}1TuiY^IU;G3R#Lh0WY&Z)c>2V^49?AH-f+g9e8ycWgVBM2ou1)wH+ zmT`yRfy1`>?K3`2tO{rSnuQUB{PB;&T)@?qH0oS``4`Yk8)s=co6)Fk%63_p$QN{z zBR$>4*`V6gJPPhGzk5Wa8*H+AlmE2qe8V`X6}(7RJ=tL^sCNSh@DN&D?s?nCsdtLICw0 z?TQvLRM-U&(XFdU45stnjk%u84G{D@5ja~3Io*z%C^!%4(lu0b^@ceRc_}Fo05zhh z=5VHjooH3gFAMfm8*h6Zl9PKI&Qq+3H!eHi;`@~e=$i6v5Q%e$4J%knIyjPPcf1vO zgn*Ex+S0Y0HmUlBlfTAuMN0@Mc7X3fr$wfjdq+BJ*6P%XV^}!di(?oVxEP0NuZBld z(N3Q*$=&0xIu6JRqpA)$qgu2>t%Ln533=vRBGl5OS?R6hq|@Q=b}|1mzOPw zrFznFvq1mjj9r75RThQ8wKA-$zuk&rr!El@rt8MMrYruA`;ytp`G(M*A;7v!aZL1P zD(d0e*2?O~F@^XWlSNRT8+P3ko@xz{WyGRDBTa9HQX*u^m@zS}hQr5PY}ylAm+ixD z)k4#uIO}|#!Jor|q%=H*p?xDgY%V=e;OoO)czD8R*I4rahQAlC1 zpKXu#Ky+EB7hQ2chzN$HdK*Gj$|=9vsT7qd_DNDvyj00X$K>$sjR7&!cOpXx-K-U@ zR0DJ#m5WNW;%Th5O$48@=w19>n9gtVhZbFj8SAE(^ohN#XsA_b*_{48KmBf@Vi|-` zvmQf=6~^rhO~-utDAQG19`d%}$ubiw*$h_h`uCxngGpUfo^Lc*rU;%hb81t!NiRwb zpN5x+U*!mC&`*{?@xBYxut(&oG%wZ-XEK2VZ>!6;yEjnmr1!HR|?I7zmvbd^* zfV2@X(<*W)uLJ;2y>2Fd*thL+fo(GuJ#uo~_sozKnAV~>n;q^@y(4jI^M%==E(Gzb zx!%)0zQfn@7BSzP)Afy)w#$un0*k`yy%qDfvkm*e>H$B*-(n60cLA&Y6B^tXAzn-i zMVN-hat4oO5~9T$tQ`4L$b$oUC@Ax?3u$Q zi&Z4Y;cYX9;1e%*FXQ2MSzf;EYAFX}R4un<`6j!EQ<_eFF$lNz+DWcGM*(5-iCo zknsX}iQ>}cl+h+hWRWCAaFY*^5Ou9?vv<*Iq%HasjGDU#a8#}d6uC$3LrqIlLkdZI zL;{dLnHRM_j860+A3%^MTG5?^$-~1V``ijAUmmb$)@|ES%+TAoDAS%M3^QrUyolbFU8~A0ROt>RPR%8+MWdP@iWcgNv;EL_fGi~=;vI=m z(AmFdH?^V8GTSn@z9u|_Punkdnb+)^mn-)1z&ZgQZCYrBodQsdNRk$x-sS>&Se4xZ z%?3b1XRp8XfO%H#)-mA9){e|n(kmce&Hb*Y*{EfTl9n5krHfvGn5uPI;*sN{6>bRG zR-OY*5Ct>T-Uw4%+_V$G>CgsqWj(>>7a;Z&-=Y2@|N1k_55rAs!W_QZ$={FnHRV+s z?`k z?^%(5tyFjr_1L5IMqImJjK4L z6GXU}XMq0^5ZKVBdcwp;cej?7QDHX|cUm85xp6o8@@|uuNe(6Q@L>bFaU1&w1ej-9-b67k9#42PBDxc` zg49Mb^scf`ngrg?YNgDS#G*^lCD_psf}w~>R!cty3C_yA{RmdoN=H~&{xp>@jQnwh zEeX%qn9hzpV;;ZJ-cH=_Vb=+GXxy;L6wo)nE#pM*&lRoA*OD_Mqq9wX9l6VEa17H|cGc>Q~MOnvKhQsbv+Ikd!{tyRvr$ z{{20pyJ%iOtjoZ&+xL2Y98O19=Od*qwkYWSD3s~W)&}HS5SV`!im3sd?ZeW0e)!<@ z&vrBb0$I_hm&asrTBLOx{>1BGeOR))6WmxSBG)^)wRbv6-|CMoTedv%_`HeFp0laS z8PJ!O8*{Zw{}|LI2{LyKF6=T|Qrv+iR(%=!z{n4t!mQGBN`?2vkS%wwA^C`i!_Ajk^ODgJhz_@VK99cYFI!fK`m>=Y2XGKu`w3ln`@t z;(h+A`QV0sN*>mS)U5ozAJjde5wdA%=sKyfxQy%rkX8;KP0a%U!nXcpsRTFK%B{$H z|M{`&Gnnq3?Vm>I3)YYzRJiK&jQY|O5IbyG#f3~KGbsT>GgE@WfDk~B=4P9hDsdIG zq4J!c?m%>lg2J=R@^Cp47pnFP);&k4bbLPeh&O_gtm3uj(eC~Np_kLvD z87JwgL@T#9-#H5KhcV9?4ODFJkUng^4fz--BKpm&K!c*h#-Jf833gO9tqic%%5+<-cimpzq>uRPrZpQDavp`txl(*wrOjsTEmxIjjPjZ^*c213T;nXmPI|9) zjaj4TXvxsF=m!SfY-V3;yBJ7GT7>>vRWEH$d071z)v^*W&CKfP1&Ok3t*p|NY8@9^ z*0&wp_&^dz^ZF@`IHAl69uB|Z;iVMY!_Y$2fL!iY-bz#*12a_{?OpMUqadg#G!5hX zhUX)Yu(fhuoB3$j3Y~QYoMtz}_p79h7L$I65z@&oegY1teJjs1<#drCbsX%(_*K7n z!-8a5U>-nBs(3Em>WB^*2I0|5iY@Ifh(73JtAuu+-lS$^saEPDW&vhN=97OHz;m0z zRvDV^m^Tz!CH7r@Qz$yF7%K&H4cd%IU;8xbxaXt}>Ygl6oBBx_hThJ4U#zdlbZpq) zOPvEIH;=(mBE6!nt)`vtW^Xjvx@o21+20)BM;t(B*Bby8H;?&Z4ysWk&u=2P#i z?jDeYwtCit!)m67{VlAL7#fqK)+78+JFFF8#4EZmVLD8_7X!$ z0=08f_h#gg`9UtjA7moC2S!C

~evV}D&Oqccc@4Gc5}S(?s@_Aa09$a~4h=Mx}5 z7=<#cyvEA2j13QRPK|_AHh4DcJ31~Q=R0}86oZJNV#aJtGEoEM#hJ}YHksWB4S4I)t8%ki0<02lWR->akhdF%x;*a*Q9R*$ zs6o{RQ*HC;WUU5{G|jBaT8N*c&1%H77~b-%4R)xX0W+rL2{Dr)_k^m)iEcc@PIfHWqW zO|Iu7IeUivs@eQ3?$s1KEC zNIDN#-oxTkdY!pll{0pfzSVwFTWhVmnYJp!pTC1=d_?T<BljVR(&6$Xo6Aht_<%wxC+4?()l^&X!reb* z%rMaQZXrsFJAurp5RrOrV9Jtzt9TPw)X5!R*LraxlG=kLGmKpbg2~~_kXq?gm5TL* zbSD)b(pQCPhvlp4t8&$(?(|pRFzde5!|>S8z@T7&H)6Plf zPxQJvs~Gr+y#e$(L52|JWHHByfLQE93h$ojH9>_jPdu(cL8&26vFY8bK{~Nsg@n(Q zGTE6pX|q`J-1ZgPuN?U<_6#esdLLXh_8qUI{cU>^D3Hz_QLguwX&-{Hy5aLOUgSkM z99pzBEWH<7bn*@k^t$qsC{TS)kRz;SMFhfh`V`HIAi#TMH{k=7fa6Cd(DipKhh1io zQCo*xSy+*OncUm2gjYCQB}o8-qvV|-OU3d2#5;3)lF}Hm-R0SZq|cYGEKNFx=s_1f zcy4GPlyKB`%8TyhAy8JpWImZ!Di43I?1~8CyR##09!m6LEhh+euOIv3jx~nEQ=YT3*goUR0Wth5?J9&tT@Uzv}JN3_ZSI5REWXUBtr4NSewM=C5 zZL`uC=fB<%hSxzytTgH%LcF~EIUN$wxx2ncpP(Jg{_rrP!S2WO*MEdC1YU_}>Tfa_ zEBF6W-2X2jte^lP7xW+ZNw5Tg>c83WR_zG?ADNu57XgRn-;(AjLgRllao8J#N3wqi zFe)Mfv^o9{f1~=TjaTo6!!^}Th`!A0PtP^I&4+T4*z7O0*UOX5@}ZB9ezhCp`B09Q zMbQ<>_)dMc!|W!vM-)RWgIgS$)LTzWq1w|MD?x!{!k;TG%zyTkbahOwXs>SokLLU@ zZ<(9#>2`RCWLSI#KM9PXfq)W8|F@OiUWtcD`X7Ugc)=JoeMt=wB|Xp31}^QL8>}5v z9mp z_k49`9i^<7VP3H&7nkWcmA0H&H;jj~M5II@SRlJ<-M5#=fD&6pH1H->Z6q*A(8u#N zZg{`^4l@rG&h)yR9ld3>wG{u2RJWBrm*~mr+hq670CW8`+xv^JJ<0_)CNFlQkUMH- z6>&<+WX1VYvlrma;~JZHfEs6A@1WYCGXx*D#UMFtOWdNkc*hb25ZJ5<3JS>}|I{-+ z+nVEo1G`u1c1>vVB;Mw#-mu!n?7iOI+9(`P#Hh|6kmjHq48j6u7d~Wr-P6lDM|1+t z{rjS449C`Nbb|t`g`%a&;kf?QI|R-V)ZFg5dA@UxoTSM;%4F3!!2X3j@U<5@K-?65 zLhvSfI^S$XWQmmBOKf(M?4-N4Kk5DbJsA=Y3|Su9n43AWGs2zr{BDBkG80sy)+AC! z5F9K_?9{KvwL(!DbbgR4Ttf`wuv_O;X$?fpOh3niY&`|}`N-OklioLqKhnE*9 zYzQpoHv05MTUEb0AbVDPUo3t!I?^uydocDm2^nO8w;YLVK2vpyCfXvCMV@B%z$l;* z-f%7*_fk)EM%QQSdE%EaGwqfd7JXLJQ1J#G<9!Z4^kqQ#wo`HGqEIY%Z9HE+Y{0Fk=c#Kx%sWUk+&PKwq6 z!6JB{bCR~{1a0+?lF$hei|ViYDGNb~0SkwEvKgV-*?~qgq-<#=l;x zzRh_w#%uphJz41kHt?N8!`othKJPym$Gz{nL0u1v1&81Vc5tCMnS>{D!tvK)Cnr>> z&OkvT$H?e9rq6#NLI5(dbSoDM+Z%5#K8}6B4tU1Z!V1QZX#Jg7>Gtn#G7Wi$QW<@BSl9y^S) zFwI&u-R-`fXe3s}%)zn$#JB@a@YC92exF{D7EpRGuhk;f+gy0v`8<{Oi9sIA4YVpQ zS57o$-Y$8l!U2B1AuwjI!K2;oeMPQmYz)%dzftiwf1EC@WkXrUyR0!qjH2EYi6aK< zY3iQu6kq?z%W0UAq)$RlQ40D9Juqkh$@w9Iie)B%W0K1~Q-2|WJiGCsxUar_9e7|? zZH%u@Fr&xyt@s+sK&Vj{(wO$zBGg-M#tv!BxD86aGXkVReW+?IzIUNe(nv;rY?Wa} zH1Uv-%d1Ky32|G{iHSszdATM=3jRv@C3D;!gQ=d-N6;g?QDR#y!e`XAVbQg~fPEO7 zBxNOSi;}1)UjZrtR-A&HSAC-$P&YY2)c*ajP!xaCFuZLvTx99{ zTSRgiUJW2GF>vw=PFbt8GX@KSj+&&kMBDDek8v;6j%0Ez7a&L->5;6*7!NeYDp7 zEXN1syVlZ-@W~%oa(G3;dRI~@;@lYU56awiN-)|4F)zU4m{YCob<=e{b$m+awISLX_L5VKBqsrc{uHN@DAvG(?S@OED9jw#`$;9xm1l}e zkk>!)qZX6p;7-*@<(UTpMg&6pMf2J;0ZD`yf)+ zXdlvTFh*D8uJy|PO+L@c-Ts4&%d!0barfhekH@JaAT00$ktKFT%M^KNQ|gR2q6OV2`;1#5)5$v z+dQ%f*y-3_xM+3e-X^Ywf3{d}khY`|rae;Zr1M0BOOtR_f`Ri2*Ra%O!lRwI`y8m^ z(&Jxi(PO}HTZ+A#cA%9J_cXI8y3Pe;uom{HM;Y@A4^deu`iCE(lZmyC2EapQ|FD+= zZ>)%^5Zk09(P(7{W6UVr2OS`>9#F2q?PR-cpm!G4a)=Qczpe+T&i8!X^ zB!+vT6!y$K3MwEgA-{}1V0+XtaJMBoNC|ebKNo62SyBf-rWI>|G+l}QNJx_`ZAg(0 zySMPw(3H|}RSB^r^?#->82;SP`V&)$`Ee0{IXVvG*Ysp8(v*w8BtN+;da|Gcr*CXJ zz_uDDl(!(0SR_AWymLQgi7O6(yo-w1Ox>0#efrwJc;E=ha(cTF!8b^Wn-AULp}`G%kN7x!(WDRL)*Qi7j-l} zIDevO1tVcV&!AvGq+2Qz7eY>3pjp=5EYIKFi*;P|Azez3;XJSE^qg&O;~K z^{?z4LIDr=Jjsk-oo?vq(Ip07eLXzB_FsN;EZ48M5V%-{Hfy0M46)29 zCmf+-P8tiKzOu!=+!FJ5VkBo5^~j9iOvMvk695Ffd%8tmsb7pJH(crVJox*uzVh_S zJ0TtPobbgrEI!Ki)sI4T5gr^6#(WMx7~pOg7-yRi;64ZSe+MJvPksIzMj*_J z)>0oaOB)AC3_itgx53$sdQAN*fS9}h%8}W-6I=79kD0I!u*P(Z7?CYWl%!nmx^)8& zRR*9P-?^qmRQ}Bj3fZTbKWWAkM{D|P{r8pM&2=Ai2;02E^oj1s3Qt6JUi^ zUQZT#(A#5s&5`dQm!#Qe@s~Jzdz(~llVn}zqzKj$sCy9{=TH6x+6TIfy6J;2iM*Is zK17GJR*o}Z{-ma}OJmVV`kmkPEE-U=z5tj;{-K`{CX&UcwHg zE*P`y-&UhKS^|5IaUZCUI+*an>Vaqh-u4oeN|4`cebt+VwF3ua__+>ZPD+5!J+%O?R~9n+xDKdZQHhO-RJ%JCU^2{n)I1z(zMfm zrqj8uM^uV;(|5=Csrz5d!hFkdvOu9C?hZLyqhz>5i*XH&M!x1CFDG ztth0s#c*_Ll5kpbIZl0rkJs0hF(o>JB#jiB0{?cFB8}~_;1k3C@ZTJbfWP=JQs0$4 z-D!#4Pjp#xr7O7=-fXc@Z$AVffG9v_jj&?oqDyNbYjHL_mV@0u^T@_$(B6&i-5+KP z;2<@k*~9O^tD+-oL!N9Ck8;)kmg(U~o&&w3fm*^2!0Hs@G^y6@nPcakO#3|!$-#sN zSN;RTH!C{g+5WyRL=OMD&-@f+%-Hw6spF%>gL9%aS8|?4lwLaeC-LAMfC^TnEpp_{ z#+BHSk29uQJ@EtMfzn}7Ot_q)K|A8$RrzPC^vpH3Axt#~&5sMx6XuDD#x~+E{WFms z*7nC!&C{;f6r6_`(#sW(Pdkut!YyIrqwCzz8)Fs~aZprV7y4)&?(c+vRKa`Bb)tTX znVJU&X{_boNk||^LM9V5peUgvOs;0&o`^c|pPR@2TAEyj$qFBg@4OwHE?J8s=e8br z;dz&pvl+TWO8tj@sGJ|DNW+^blH4IJZ8TEXo)romx*!~0d_U{Nf!14j5n5^jhfX@M zPR@DoT<;<;S2q%AI;{bwWv1waI^n3L2D!mRR6Fh^E=H43wQ*-8z?s|J$;L!_!><%v z$&X15zd4D2xX=6Q>M(Dlubzz8=>fta6niy%-B!&TavXgg1i^r+?>cHbV?0-s7M)2i z---M5X3qq+paVbcA}>+jHEY-ehpavVVo`s*bjo#Ik{~WyOK9xmBetYw+av zqS!^;;?OVjDJt1xhs4lWMv?4Db5s{lS{XE$^QhCNCRVY>W5^e$V;<~lfqt&(`;I2r z2NRb$Ty1sX3QZ`dOcwNhZ5Cp#>;on*4+Z0~PUY15Q~%FC0Jev4ES_~G0A9PhsxJ8G zDONzUA@M@L(Od}3uo|dsIVw8!c;fZ^uLoy}o0ulqnM9o9y(|iN^;$;5z9~ewXO$Bw z=V%>cJ(`NgpZ?CQnPsSQEtFPh$lAwAbVM>uokzjV+_dlw@0Q#bdD7FbE)2o+9(Y) z(PGC;7<$s9sk5rIuppn;VG@uzR6)c~exPJLf!mSN!*9(-*oWgT)AgXfIn2t$`1iS&in!^Cg3(K+}_k7 zxOMR>``?L(<;Beq4-rV%1}z}(pN#_&d1 zxLkfk11yFoL-=Hg?Mov(oHeLaOR4Xd6dgv8cUSR%#+{XFCq3}6ULcgS?jl3jpOxNo z&G4b$|Bj3FVWO9#156*!r&T9M=%J`)Oi_%^pph}wQF%ih5RWp`{lNrN=%{(olB{D{ z4tN!;bG3PedVra0p4=<*D;c8%Vwq{B7=g?%18CC(`h`TA-govuKV%ko{Di_r`%U!$ z1G%8|AfS}zkQRXL9_2xHQWC0;r1v|TM7t=p(Lm8dEn4VSfX9iE(Mlx3w^4elzWeDV zgjF(lr0Y$UW0j}a1w$h}_LHC+IG5_|XyimnmcPW$kQI!<2G2nXn|na|H1cravkEOd z0BqG9(#}Pedb>07L^pJ<~m2E5+}A8 z^an^2;hFm299FCMDa=rnu&#dZXW9Yq?iEt$OF}RGtcCv^1*-TL6f?Yf;(y-Haf@`i zO%tHuMe!dN5bO2BwXH%)Vju+ikRr0t13Wz$;XH@~D4|ic*I^B{QM_OYKI4ON3e~?`M^5Y3- zPEjfNDFmuS$ZIq`#u+dy?K!&uCQgc?K>dI>mDp)(0^C^P$8BYRKlPKTdiy6T)zllc z20G&74c`{yHt(rWCecY{B zD^VnDg|Wv_^hlsKsDV42*OnkhHSZ^2G?|>Jom0q(=q|ZHP3UVUfV2dmr#Ko&Egs8C zpB<>(&=e^`S{rT~mr?)Zt(ieobF}GFa|i_F1G(2%!XaP15=ylWB#>u|AQcc!Lb7XM>ZF$V%Oi4 zNa-nraPo5%^}0;*g~C|V_(DprDDsSsDPh3ODJ|xFhsi4 zXhM)43NjW9NGM8)1~BwcE$6bMQ%hL#B^Q=EN@}5g>sM8{yvA?y-f(`@ z$U@)@p5MOZUXFB)U)wxCG-_q$o+Ev!zW)Q=`|eTkAL0at3Rb(zJ3;qz9$cFuo3d@C znTR6lkrddXYMtVg0a(J0NusPF(tOy8@`?{n85AIt@VX&(aE&1^>i4AV4Cizg3fMbo>EaF{>}y0rd6UmvO7TD^?+08S!gKD9&H0NCg?v@0+I7&+y2TQELY zC!ve-F(La_UJ5m9)(`WYZw)9nNE%NPWHO4A_!<>rleBdl6egR*X1_e0?R)#LbZN^{ zEFOA2ZJ?aL+TM;odQH&z zrc%$SiLNQAh>#nHs!X-9L;5Uo$i#s_w7fAyT7ObxPd7*_tb5z=aQjh-iqY8_JK>i3 z?4DS~uP6R_VnrE8o5KL+WLeY%&Yo+x@ax}_7|=kd1VEq&TrlT)p8J~dy5#1UetVO5 zs>0sM1=R?H~{Z1(s{9^m%0Aq{3I`)rA{JKxR@RS!LI?((Cv6<2C->?xl7oIu7a ztT0>-#Qp-!_P2^}^`ClQBoD7g1e6p`LO5a z?XokYL2Gh!fz~Gn7eWU4^Qdo9>ffOZS>wD_y)t^2;|?H z?*bhs^L5ra1ipkm8gIJOO+Fe4HbrB*1bAh#hj}inblz1@y4U3`XR_m2Q;c>x%w8=p zR(E(D5L~t?#AZUF+jyq2Tc@ps`2-s8uw7*a)6x66%&qiSSRDiHf5FhG1QkjtE;4;e z0w$?P>YpuiU1sw4)6^Q1YLhZWUcZ=3Ko+%`cGzt;&K>nLKKLotj76zI{m^F2nD6^Hlv^53lQS(e0{dG(@Jft@FA9i$A(LgU($(}u;aQu zW;W8UJ%3_sh!Vz}{j;`7?{6C7u%*e0RejQ+bLKP>E$L z{qP%uZ`{rnRDz@D!y?ZuH$z}8c=?;N?N?^B8s>Y2&di@bD8Cx69E0Bywo4s?)|Pjx zeBOn&9@fg>P(M*u)_B4vV}ZqZR~$RS{falGTW23lZMj8&vE0HIJzpN}g{sLbo~O_C zS=PDTfPhy@+-+|ziT2vM8Zx2g0o!Z4Q8{7p6&6yW2&v8bLtGO;9w73yM_#0EuuqjL z4L&Lg{wAX&<^#>39gL!-;fU?$swPp?F-N4F(Z#`{L-lRhlk#6uE{A&!aLygOg(w}> z;MeM6URs+6YPu~7y-;%hn7+J%JE04|OHdLQ$&Q;^VNN91%4JHuQV~w00Q7-#AkrcA z57iH}MS}c1xb8k^x;o(! z@VtCG?X6nyd~|dQb=u_A%lLX@6RsB)1ZQWwc&njc`AYs9ipHs>JtTy^6}AW)71OwH z=S+QT4q5W6OInLZ-%}M%#>%Q0dBr1A$~_E$fwj6|+(fTKhq1`UIJNBIZ; zIDXVdbcA~|e>zYDg%FQ5U~u{e>xios$VN1aMgJkD0gO!)`AR5L(BjJC?PmBOeO4Cj zMRwJO(#ZCD&1!kOJkuG%EeiPu$P^HP>KLRqEHKzb!Z~#jYw$&GlBV&M1|?Ig2ER?x zx`94cz-jqsM59d?0HRXo*C~Ul+ghQ~0jQ#x)*IbF!#PtLz&T~}r*9(7(!NTKzT@xcu3UOL7(yX~A2O->XaQ8<~#)8M-Hc$XeSqQv7yi3VeQX zNS>Nr%dvD0_;7d}qU){q-bo%EVO~dnn<}f9=%u<{7@JIWgu~F6uhq&%8+m6RFE+>D zRj7mH7+ozlZ>k)K?Ld%XFRTqtXg1`_XCzL2AZcrWei?Z4@a#tYT-BBc8q!@@e=O}B zySG?f0YJ%!8-5hCOjF0*#A)pjPgOVRj);64>*id zEsXp*i5Vl?9M`S$1l{!H7N%}lOwe=(ES9KS7Fr_rx11AiFffZ`Ba$0NnOUfyW4x_h zP#W$4S^5*q=Pk++IdZSXvnIn?!rXRE9q0=02vFB?2j<%4KE0iO6h9M&pJ^}0- zG$S$#R#v~+!wJbWiKZO+C=$z{7K>bhU%1FCvA&@9d~TjOlW#7>HW49zv(yChXzrnY zWzmatV_&p}TNl;GWTK!af3x_wz(Bg1eYC~{Hn|uKrLk80Y|JbpQnv>sDIF2BBN%eE zse2@EN2B}{YShN)O^l-PqM}2Tqb8jQ$JDn&W4O^qwB|a#Ut?01zX@mN6_bqsXwny6 z!-FdmX{+YGgY0~NXq5abhnMJJIcOaAJ}^REAhIlDpM6pWLLA8!&wcR^c3Bw>*L;-# zU9defju_@C1ODihXE{;9E(|yNy)*KVd^#j5h7WI0aAI$(P1k&m2z&b~vEE>_X9p`` zmkZgAtU>+ys~V=!BmBa-^En=HdS);|U2wkL#GX4bq|4UiQo(cwEo&ry!XRe-Oa5`W zQ8)3CQK_~RnHJkJ&zR`H+ta!DKE2ohN~>5$e!mLFnPHh%v97rB_W7KWq`># zJUiS1({{w5&Edyb*ES*Q`R0A547)8>c4$nsocuI+MB-r+s%5!Pep}v$gH9I$BvU4| zTvLkU&tZjG*lg2i!R0@Sac*sxM1XyK%!YGE)6kNuiq0_1cQZ*Yrd zAMf7ZtS4JNU9-LTHBp7d)+2>f?%4>}Y?fWdcApndm2Koot&P7b{a#Pw+OG8BC4qN$ zSmXmZ@D|nFz5`uz2i`vk+tzgf!XMY9_iHoVAFr7sle6C)3_WkII8r;pA3i#w!7Rmx zzR_||J386=J6govL(5P~lmmi{f}60GKRZvv3?{F za5Ytqdk8Ea5{A2$G|*1Oe0tCp6-S=hK{oSpkkw@~+6Hi27@9QClP=5v&V8Z@B*YRy z?O8?1t%M!l@GIv49xVxBH$V<;Z%>gun5!tU&6*Eaqu-=eulDh}`2-v-SJM?Rf;2hS zy)7Y`j@}KLVP3hp!&8~cxr4aH^PD7b7@C(`@W-h?0qN-$5zz`Kh57&tP~)a3s7hwk z-;B5369|U{Kr$ZYcJ>*7@11m)lhRsE*-mZCwa(m&V452YH1xCr*yC?+4OUsDrC$w} zIX;+?H*!C#mzg#FCTW;7lug$~bu7gCNiU8H?jZ%08x1T7uq(t>OC?!CBReo>gAdlF zD)p^V6Iew9R5lu76IN6wl(HG3z9#f06FWkD%efNNfxon#{*Vb?}smH=cnv%sze zvxCSlNGQ>hZBERzp~17WDZWqa(Yh=ehGn$$BO|>R)@*9i8g4-}g!eR5E`YUZL{Ilh zNen%G-|H|io1QwA7qcgZyz$+@w`J{cm9!u5EAoP=Q^GH=y@yMDBotKgZ`Zzr?g2hr z1AH_9g^N-a>jMh_zgNX!i&DfH$(N*$qhPqLt(h(0dZzD_|6#TOvR3T#A%rdgLK&Bi z);aYz^NmJ+e>*K!w+vR5pGB+ljznvJ6av@sR0-=zL`!eO)#cA|z+N&Ej$htjk7T>e zzg{4X%8=o1k`@>AGnBVn$CmNBP2YIq)0~#3)#jl>Iq4|ClSKlu7RAr2$c}^)TwOF; zz02A&BadTeUDX>a#J3xnt&B-oxp)fc*CdFXih~3E@cZP~d{q2TUtd~8_?ms%V1|oP z@-%uL_kTZ!>fuCIHBoBE6>%tB3ewK7V`@bx^pYD8@4~)b;0bIeql)=WTFpG zktv8F4SlT1vod^_Y*d?8<8zzh_p6Z~j|D+3ssuR}LG+u!t?cNFxG_T6x3gM-vd=^R z8qG}6{dU>hyu#h=GY>YwN1Gz9O=i=N&3E(WaJ)Cb&D#S#%-(T}(Pg#|1F3;M#vxOG znJzWHYL2L%y6LR0tMT>Z?4OElW9ka4!_EGJ-}S~G@U$>`rk$Bu=z7te!^&W5ifCLd zm+-w|eiNz58@y2Y?Cpn**r)niv3c!p$qL`CR-a$Z3!ut&SKYnCk(F)s*->u-EapCjr`DqGQhUNF&@v0p;oL)t(e!xhK2Z= zJ~S4RqUD7IhM~@zWds>N2xF9Ci zmYd8GxL}0^{ww(AqhK#`W6=<+$JiAsXA6@CSyhC8Dt?*6`)+(a+NdU|L+e6bJbhbd z4q2Fuw{`{%weDSB9#T5zGO}Pmgb zZbTG<)IhB69(=q_dj?NFhRuf8V$izn<_%VPvDX~%AjZU8aT55PcmDTLs6eDC(QDR! z5GQkT!W?Q%6)n%%*r-PvVc1mr>v-Fc3$5wByu@;y`;3SrhGaNpPo+=o4kDxBtS=eL zePx$3Q_KrA%c_@SYS)PB1#m5ev1PSjJ6Mu#queW@27{06(H$fdzQBriUh(n%25k)N zZ6?*S$Ul{>ncY;w2WcnlY~;sOtdfDzG{gw^-nm2=F$1cvzp$;h0Tq5{y(Tb5FfCEQ zcVkESa!XGYA>4`x{DQlx-iOg9lj&VY#wcUZMNYY4Y5@9Or<*gd25_OHzbx2l>|0;s zmj6Y4$g0d{jr>9@9wIop8S0opU(Cf=@J|?KVsOKMc@b_h!ohY#@B4}9_)^d|X`5QB zQ}mh$SxRqx%qIJurYO=>>GrbVdh{r|ia9)N(t!rdy#5152Z^W;vO-UG<+MHj0b&2X z6kpUlF1b=S2VAnw3t;jqg?B)G$<*)M#D@Gg;yp@uQEJxUcDVdtVXbUN5z|x`q^N2CgUTZ1Sm@{;0|~b zV~zbWt&MjjwYJM=UW?_sKhX|icS#%tJicmX-YFin1fG4l72EZJ0^ke$k+)PU#bBwF8e3V*&*u+`_??)hAEzN_spNV)alzudtnI~p> zEAYd*Bb&f3WSjNv=B-lRIw^NI_*DO)7o#R`W7I{s9C})x1zDIkPe`fdtrru}S4C@` z&0<%q17v7J={6fxrx~0n^KZ-P%hSgiiXmqlK&h~E4RFbz;~Z=}jPDLcxZoZxDru9n z{c@4dTbg>_`Z#No8=vIhMn%^wRmLd!>6Xtq5lFk7T?5DOh}&t;KTE_y4Qzz9Whs0f zuEY0Ck`qClJ|`!|o#_CUDxk5kOnS;kd^|@RN(4MjBxw;c|2%oQ^h-p{eq$u4?^}}u z0Pc##cu{%oIc=)^LL#aXmGgOMGm;W%VREcto+^2ea!REGov9=TB7LHSv6=DE^ z3+&}A+-!ky7@_N@epC=#zEFC*dM!bzI-g$R$0_Ojecc%uQ~hF-4q+#l9#FigxR&Nh zm9K=vo5_%V#=OuqJ%QmfiX>-anoG9}!1B2vM}6LeD)^wDeTVp_`~}aW<_OI5@C|Xa zR6wZleA)DnA&o>M-|#F?oA1a7kswuj)nc5KH@~+C$$<~k%GrAKK6oE<{-hygO7AaC zdn@wlXrh@m&OY>E17WA&43OQd&|*EE?}-wmw~)#WbmF=r`vo)m-Wmd2fmvQ4plteV zZjC3*oKLt@bV}q)HNGKvP1&20(i1A2cHfXa6VGid$vN&ZTf6hmey+ z`h^ghE##xmo2Ek?6lcYomQ$QjfDwQLa`V+G%X1ow3C!Zyg0XpP0XPGPB|vPVuCbbw zv<%AbD7tNL6E533**M>lT!aHID$bx>yBkvU?ta5h8xwB4@o&u}X?T$?uv!f1tUA<&l55c1^sYXaK6S=v5Z96&TC6L$8Lp>^`#6QY+`#;fuhtqk#H^U*lEqgG z=(IKsI=TJ6zlQAwX;Werr#0B1{i11QALB%y3FIHAS@BM7+>F#Vi0lGlYvcYoMV=- zP)$vk_zR#z;Jo$p7+D$utvbtmKgJ8F!zPr&=ETOr<;%2rAXbhuz%1T^5+9h4LSKt$0ChZEmb}V^ zW}0iF5K3qJ+R3lVp3(z}g0>fzvr8h3QKh?D zDm4PSn~u6AVMTBhz&j+2dP0GaUUz#`SL@tDQZ=w-$H)m-z0r!^gvGK5KJT*53vS&e zh{nTZ6%2)yU!?0*(Hg|MMiKP*;0gGY+_vA1sBeatFupm&uSHJtue^BIp4VdqX$K%{ zaM%6NFU=TRjF(xe<dhX(aLuY~Lxkht4zoJDayDS@R)gGHvqB_2(wkir|kL2Tp8i+AZX z49m3pV5~mITuEU9C?^+MC2j&Q=7+Xptw(`&1axRESH}(5lRG3+lh((MAb5HFLm|r$ zF7T-v^qSpaK&|IaFC>LNoe6uIl`;5^v>iSz4~btcWEpdB5TnJ~q4dNt(vQ)bxUsEq z5bvU>z7Oi4Ru-B`nyiSc#@fMXm;3Ap^DI~U+0FJ0(B6|fzM7M>z`)(LfPz}ToG^=N{MO5_G zASdOnvGQ!0`ztN4G+Rh{ps^g9k+&}%47yA{>fiq_5&yOE%-FoT`NS{6n{D1|L6zYr zI7~EQ{ptcX^RprfqYy3xHl{{3ASwWUgigBK-q+?maGx)>1rRt(1+=aOG z{EVpXQp_XEqSQlh%%dT@k(A{5g4EE;b6?#}1oYlAx}uvCNh%PFuvDVd4Tt#14RvS$ zx{3ZpJUCK9e)29mh>m(V4XPcg89k~|Zvc=CNI;Jcw4zpJD16NTQ7eLCX11|2Tex6R zqd#sFo9%rhO=5^qAea0$!=Rs|v9D(KY?>z^@rXnS{H{0#qf$F^`L9dy9Soy){ zJYsY!SbZUQp1)}(VK>8(Tn$=VMu{JwAD2b1I>jJU8=q`Qb04oldbxZK@3$C2Ie3In zfZB?oqmq1U|7i7Z?F^SAC!ip=i<;j-af*tx9u@>Bb%*!VVhCg4)mmP#gG1CEi@01g z9I`607U-^y-lblnf|)wx{peV(yihD4za`;N6bn^`19f}UUuLN8A|X!Y|3PH{@4l?! z5pu2Kq*~xTn$DD6Ph5X$Q&NLxQ2mS_O_INu4*q$`OCg$DR@jK&?98^i`oUA>L6i%9+{K6tjO0q}) zGw=yPhb-`*+#b}vg))~$+R66-P_9L27BDybCEvN*r8%u<5~d{2y^+f&mVI~Q2-y2MB@KEUFGeS{GkEMkPIMhqx!bu)7~~0scztP zL+4#E3zLFe@@(Xuq;&$JO#P$t;c^W4`my5@ubU>PMV zIKRHe#IKoU6E)Nphlo!41|qI^`_JnFuTRkAh8(4pWsThciWQD|HCG(sG69Ho97K~* zlkG(P@th^ALnAPAp3ty>hyDg1p@A=<7I}&|(5z~fLb6L`O0n_d18%z2e2oYQ)j>%` zn?f%Rj!8UP14F+iI2(9&VDLDt!6o{90fJq;Do}sgv!h5vKt#dKEk4rpEDXy_Gnc#Y zpn-oPj2L6aeJ4ifX7jkK6K+L9oeCcTf%`95{6z~Nl}QvRHKJ~S(9;EJb#q4KyXV!T z5IV8^C0a#PpipBnbOkB=aXK{#&WwZ%R@3xv2ACSP>;NsJfpe7CE8xoF^IbC5p5I}y zxQ3V&yt|N*+!%szOx;_-ctTzB$bSe>huF@$kct&qiLeP9Eko&m4%8SP4!WDH&YBDg zHnI=RR0$dW#70^HaJwY=KzfhgonD3F^L?PqS-&K|k|bPT(NB9%x@!H13DKaoYh3@j zDzD&Z6J&!gw|Nt%Vc+0_{(GPDK^;DCGN1A-wZ!Mary8baP1|aTC;S{09_7Frg^?ZT zu&EZ(h=uGt0wtymg_WOH*{CX4w|BT(rE)pW4!L++QtdkcpVFQG?OOj11Fy2E$KI$T zq6?WiHC`o_Ik(`FAsjl9*rj=O78v^GyydJ|7+qEI%o)N-#!wwd6SJ2!tJnz?u zG+RycxRj4a)%-!i;5$8saB6o)!!}y9dJ6<>ieFmSW6#M=P1yFNLcGhrbjHFQdxn#} z!P*i4h;m@3Qo~<`iG5Ac)EVHjRPs?!lo<2qyZsq91~Qk zER{s7xYjh%UHZ7*TUa4W$=JGzI@E+jJ{{X9S3}`e-OJItc>m6P zgc8bMNrn=ZS-CMIC{*5^znCn47ONE90R`W*T})*5Rg~PJ=ec{%Y(8-b2-5oW^t}!O z)GoS7*@-cGCLeBV22d7+IT|9pbeY$j5_L()_ba$E0% zKJ7csKd(kkyuAs~*KnEUk?ngAv1uKFD%{M1w=;Qx`X`?0O1fzH-K? zG1rwZaJXlJf*S2hR1z(Ah1VNHpHOCQD9F`MsnLoch#~soM(n6~VrBu_KM;e(!tFVF zqNvmPSSVCJJi9q96*Zg?sK6=mmo<*-l2iG7o3GdFDbnVr5R8}x+Yq@l{00N&* z70_4zu0*Bq4;|D-p}ca*x+la=%!`DvgjsWH2YJRLN%4tL+M;*>RJ7vsUXTgpwX5Ls z6rU?2X_uAai4Wm4V`RYY-tAfGtJ4?a{TT0S+zWQWYNLbul<48%_{I!tLGdmoKFh{v zDs!3yALklPc-ph)?b0HR<5vt1FwB^PQp@Fll~K|2Ul_y(t;M8E~~=r;Fm*f_@Xx1P%Ildafl?FsJhX4a&1|06*x!gP!c30g$Z| zjx0AQ4f`p@H4L_<=$`3Gd5#FQ^mdVOgkWF{Vj6y4!^R{|FCY&F$+^q{sN2TRJwlp? zfKRGJYK}c@O$hYfsSx#do>Jm`-yxv;C=9AT%xorReQ;PTa{2u>i%fe0i9kma?P&~P>k9Lp^? z7rQ>}Pkk>$+b~i`@fLk-r)&*|>k#;EHpL3IQaJ(YVeL6GkJ1N!jma2hl09%973x7Q zsN9&rZzS`#V*{ByM_rXX3ti}FRc}lXTQ8>=T6?iNCxatFq_7mx)QxrKbzFR=-J z-BY{{RnpLAAllOT1Dwg@SZRf%icvTt5Zau1sy0q2{$=t#9+mWpk^3EORwv7;8eVye zN~6SSDbYrkW!k!UpNJ|LasF?p*)56sq)ZfLnxUB@VQn90z`wdI5BS%pgZDNwj92#) zA2WJLhElEg6=sJR@Hsq`D(^`D-(8mY6W)UwS82Z!98=AahbiiinNWF{T+oQUt^;U> z;M+F@;II>HOVgvtBHXIX!7|gv0B|r{sHn`l6gGm|S_4<60OGlQp+*M}+~2kO zkO8G|44nZufT}!)rbX08g)M83r{rxZIu9xmA$392YCg?}->ULkl}${b=2g_I;^cm_ zYV65NGHE)wvuD0~f>vo6PrSZ}AWG7jg02t0y1lCU|7kIH>H}owuM~ycQbgC-)rHuN zBYUD##srP}-qp&pO=_8|Fp(QXrnRKI{3{N48XpeO0lqI4F~q-aw&Y{Ijs#%0{7zML z!c^yt0;V?oeslCpZStV^zNI_POI#N*H?HEiW zp5$SKo*&HtW(L5@WKZ-tKL$ACwiG?i2gXNGTz{yE21-DhyA{K!;{Tg6DX%pwfHNT9 zZ)0frS(`i4I6zCnS>3t3;@^&!>ioR8+x~_Fu=f9Y#^VPBJU03B;7kqhXc}Jq(|eHe zo*yt4jJON5G1X>5b9n+iY8h8ne_Ht$=iT#XSNa%^;4Selwb2h$QX@X`JjXqAp0njL(ZD6Pa0&fv0#k9#=@R&Mi3l_T9UCD8^&KAsYgB z6wdC(JSUu1{yN9*3YVAD(=jzL`ErMQ-EMAv$+LCOG0j~Gf%7pJ+LiL6i@D3M^Q$0M z+cB?*NfPm|jFO0IKbI755A>{;cPah=gaboD3X)C?u09+5)i#e3;+hoR(*A7d1Fo8C z-_L4){dWDDH@Q{CV{nFDAG(`~7WS(ApA)7N$^O2X}9rcT8RJo2xgg#@Q`OJE$(( z;xVYvU`s;aYn@3c_IXjy8g#Y?*1BN#kM(C<^kqk^ix)5VOKT&kb|Yp0equhXoo(^w zS^B{My?4B6ITW7gl7ma<)8}V?)1C+PjcN+|DvvKRj?b(8{od7_ zUhFo6S6^5UmX3a?yxyOhhFyav)X&em*Q<-&sfmLYe105O-@cPP0JIn-T(<Vv8cvMtF-iTzekkk5Y#|EN|){BWZL4 zPsjMcnX5geh=?LL>==V;9(p3Vy|yo9xu#6nS*UV}m|N6)3j{&5wwo{&`wEVzrgS~i zsU&Y1$*VA1+gv6Sz{1|P;*^V_g~@yy{Qi|n7@eX)0PDEFes_Q3&vnoy>z5H9w2uDy zRONBB^W%$NtZp`LSBPtRF-t>Bcro-$zejzIVZK+8wxX{H_xlKb?)S?7d0lMjm$#p? z0Rhp=gZw`@$N%5!0_eXDzXh8UVf=q?7AO1&$NvKf%~&9a{>M2=RWKw$ZlQESF!&#F zD5@Jl_w4w8jd_e5ZjAhyO*(4%`XT_Z)pg|G;`JEZH*;g7{LwFp z4P+S){xon^wE}6gv1sdAmb)c~wr;YaE06K&{No?Xf7;`~nf!9nC5QZi(8v2vb9nOP z?7}_}%fCkpXlov;)QeVqo?7}b2bi?0{k#px&E)<(TutN>ljZV#jr0Kjr%$w|eEfQW z1p-3j{D1X{Ej_)6PP+fyG7CNu`TsKVkNkw(Vo!loBK2Pw!wIS8zo$*jx4}kk+3-ZV z{Ew#8GS-Y_@gEE-HD2cra*KEylKg)VrIz#&q}2aqf@vP<=Rb>%7G^MH_5Uv05)F%d z{XgiG4<9nv|003n$hk8Aogzs_=Kf#S4YHA!|7SMB*^fN?KTZ?$D6;?mD4Q`q$ZY?B zOb5e=T_CRHfjY=g!S;e%)Cf{3GzUCpQyCnZ!F>xXe3a6DS9DL z3JOnmuGH$e&8#3T54db}g;sR?tgs2I1wY9*$@~D@jz82M{SbW5v8e@E>E`^LSf%Ut z-glz>86|a+?wb(B+*qo>`VRkU$9o4%Ral+Yj;Ks)`7@Cc6S(JNfQAc2R#k_~O42GV zYHGd5RQ&jDp>}V0t9az(Uppw&)ZOg;rmxJ$a|=#lK&{u=SybP2R$~mB)9Z#mdM3BFw)PS0nbt&V0vW{IqX?;BARb@O`=m?%HfT%mp*z%MRP>O| zZV*2Vl)Z+RwdV91BCAWPJ8S!mYH#SvOV&1;f+;WyBZ^oQ8nWS_OL*#_xGceoieW6{ z^1q!#(MxBIk-R~74QUam-jQHTrNgs0~)P;A@XRYHF z2H3g7&JJhc|%{j2;bckBRB^t^Si%#x~+^4R!NQ)(0CB`QgLXr-rNA}5^ zdR`!?M+|!gt5Qeu8JCiB#fpF z<;rsOr*+U{>mpe*s^0H9s-1jib&K<;bth;ixcCkutE zo0%wOOG^XNBvwv&k7|Gx?w`Et-xO~=FFBfu$VaQTl`QChM=gCklx-`Bn#n~U6m;b9 zf_Ow8>=QnJHYr5frd6Yz!-DaC>T)4{IMcvQ7WoTPYiRyCJK~z`pt^ zj9>vWr@WSFtuQYj4@A?>Z~cRVuh>AooMDCEP3*}(z0JVK_`a+aYX)gzI6^8;jlY0t6vx-;2 zkkd2(^BBm~CK1JLyr2CQ?pcPW$Bn68sSXVw=sGi4>4p&*lK|@kX{t^DISWHv3u_;R zbt*=hcGca5>?tNP;q4PSrR^}bF17)|5sI=4dEKlqd4CbksxGfOkVL1Sg2tG?gJl+x zk8NpN_wKtW(}Y}iho@&Y4aKIsNopD#S^OCQoKQH6AzW|3cVcZ5!&uZJYRvPgMHBny z=3DIhm39iD!DAgWaU;cz3XIU}NB8a&U2A4-+ed;jM-7l_9m?W(xxgM<4@7q~UpM?q(*y|DUap-RWt2?hccTITQap61w=ZycgS zzt7|@g^J4Yx9hB_%!a0q$OU(Qj(OH!Hq!bNvEY5MBh^2dACUP`$DE!4EekyjzCF~X z2XmC8C&C@VncU$CNkfJtKPg+`9P!wv-8ynDj4NiWc`II~q|0};Yc%7F=`cqg z$=nhRo#=fO8Bi%vr>|~n6u06nmk-jE;(W|pFCzgye7}f1w0A5+UjIO|DBjG14x;lb zloFX$TJg)yhfz&WGVoM4AfX0_%raNyhAJ=L~ERJlc_vz0)PQBW|v%%XRt(8OftxlljbBP8On0n4>S_UZXstYi1v-Z@kvVnb`2UTX(Oao z9tfTYyAIiyyxle62K(6<7~YP_msp+PT7)1~V8=qN!lyfq+Nk-2IkMzTv%WdOuo6bE zToC7F723(-zHuVJTm(cdK5?*cAYA)oVCPWBQ=I~f_x*{P*rjB`@W(U@@6_qK^ms9r zI6)wH$7D~N_iQea3!b0aKs**-G$%Go|4A_{PwgYxf~f_8?qp z5Z-ocSw;a%$yjF#YHt_htlb~(tT&OhOF!Jkp_bk+cb2-?jxemWUwS3AcZk*Z`5$Sl zc44)RL7|SSxqL4CWBy0*j}N7_*TlK_UjAk4szY9I&rAI$6BSHo zxw6Gs$BmP_am!bF9!>ur0Hr`$zf=Yvjm79TNoRrBFt(Prk03*+I$|{G$?uJ`VehwS z9L6HN5y6Cqy=2V2=w5#**F4PMJn8j&gUtj!mFol9PQP!(c-o5T6N_n-(CzFCgcIss zFB2|p@)P-c%zuNxc(WNW;Yw;Rsvzx@H5Dc6NF`nFeAa z-%~vODrANu@LOC*n;Q%o@)}N(@QHR;E-(ngPdlD}VkQyQaHR?9V0rn&Z1l%G)*H zwO33UMZrHxQv5i-0ObDk2X(}`of4}ATS>|4%~~~pT_s*Qfcx{^T*)a0r+Iu6_?Id?lkd~de)8Xcj$m#He z-db{Z=Er~t=;*EW9=Fo&d<3Mm9C0)GRP0>^HWGbbcJ5-k$qE+-Jf-E!f&f{(x{jxOnkQVIdvuC*47l=O7bzdzUdDU`k61H|Q64e$ zc!iAJvf@?thPcTt{@cKedjeDEV&zVf5Htm!Oc{i5w;A zB_i!y?G?eit37vx_Hi9?0qnSqVTv5|7(x=-*}9i zJ9m!`k4IzwPW-?VQCZMEefHev=x*y65*GbRdv`~@K0v|ubrlXXt~yNg>^L7flz+FE zdpcKL1*Fi1iOc;Y{lETH>m2mUC66~SygeRLN9%BB`0wk;5%;Io5hHPi2;T4A{V*cr z!$7={dSI;eC36VY-ta5WUR|9cF*o~pIL!+C^nMvK#< z;7adRG~xk`aw&h?G`aq=YSwJ@Yo*cm^6|BTpNiO>5I4?r=RBv!AMWovkKpLP+-FfJ z$Y)O8i%Xu|CMxZV4D~oqq#p5*anIAaoAP^p%mR4{IFsgh?eDM7e_1tx+kdS-&4yBY zW+S>;SuO&knV8bWrxs(qkNxSvz>);!?y{W5{vG*GD?G%8vrVVh5}|SvNbb*fw-}H! zY>!y4_qOhnmsuz8M=`md{m@T+E)S|;e7?KUkkT&QDRPg}NQ(Y4Sxf(kV%r`MfY zAS46`2*<#+;!Z6k@)Oj#kQzsLQ{KPs66bCXi!R?hK%85tXxUW6of0(<*NP3h%)%l+ z>DW(t@}wBOaD%|Ij_erm-WblX58@uY`OBL-5y!r__8{8_a~F~3gnyZXl}7r9&W1x| zA03dK@)e6Ti=|Dw_u=&8)gJp!pQ>Jol<(w+o#E^`Qy&NUc`v>}XP&lTl zz$tK-hc!>Z@zL^N?&56m6j0o-?n$swfCaLPlWZjRzELewQ)si1%=IkbAw zOtWwdX6NJ>M!;7A(HPwo8plX?Nzf#e;#tU>Wk#+ZhBMb~fD59GXj{rWZY*i63I`1xeQR^NQs(l;^8z92lL2 z2_l4ITBJGcON0Uhxa*P|?sCiJW{=im2`XAysO?hR>`TlG;=cJ2-8^}I)FUAtYDsE814e|3Lkc5?w=f6n_GSx^dSR^hGh<#) z9-{FW#DC8T+@yeGG7lF>shNig@-;-F0$|Bb<`-E);$9x94&s!<%=Uc8OXHj4+$k0U zAO(G%btQ_{0m24jQ zn@(1Y(w9*ddh-uzIDA_1gyyfqL(!9WOPJ2nn145)U5gcp)$3^1(FFYLr{i;_%5|>x ze)J!(U!#n9k%HqI^E(Zzq_>-=27`=r<{JK`c6_GhHB!Y_mtRuSju1Xa9HbjhJ3YS;Mgm1Bk+XcB!D|av3t>+09t02g68mjWnAHbt%vZ z27hH4l#b)*J|t#RCWpB+lq-#?B!oU8iIFVZ?2orh1dyKlD#Try$wctbBuFV53*C&q zrK%r0=kzz>?ZYm+ANx}5mi|O#ROF?}N^P1DR+jTr9KD}rDkQfQ{2!Z%w968ycq+QJ z{O~lyp#1$h3l;vQJ6VV_yh$gs3p;ICkhP^bZzCu(MK9HVcuav4aZ<9nFWvSLS0t!_n zV}1jLr|d;jTev#yB~&e6o%VvNCRdx?Z4Vjm@3Jt-Q7mtyh3w2MK-JX-F=?M2;D6`T zVp7S+I13@EXfM91VXyY6lJIAZZ;NRBj`dmjz{4m~CEI>-_Qfx}%Wrv{h`6WUgs8zp zlZnT$#Qa;fq4isxqWS`%s=cty(}RI!^D!|b6(y+)bsp&D-hApT6T?j7TKBP)yX@6l zwFXrCtQ|v?WM3(*k!&FK67M9MOn-Rjb<8mUcG_O%RhvG;juh5FPQSg*tM=%I`=<0y zr&yz|wl=%Dg9)Jvw{+>%vW&17nANA|nssoF0ZPzT91?i?n25|@?nxu|>a$t{uJEDN zP#P`s#+{4hRVOgyj_BQp^tDJ5@~&?7DO!lZ1?TV5gbjHRY&K^s=>yHgXMaQS^aK}< z?rFzQFj=^1pykW=iMwzE27v=2W#d}`f9pH&!$-#Bn*>ocpI{=4lqnURDMyqa_LRa4 zoF#WD=57!@X;e4cf0pCI*G_VySsm;>@7G9mE2QDKoVP8eD><^=J{x6HO`5RzU4<2q zIkFfKVs+!6rCg=bWo+s;=YQ{PDxW!CX0#^Z-eTZ9?yDLWY_8&2CZkCum>zUfCD!to zt*7l;#&FDit1&=riPqngwtGfkTmNfhm?Z-F$CF{Zt4#kxi#c^No0g>`Ic9kxUY^Dh zM-%r7Pb9T$Vc;}!AGX!}vgTR53@n6iIloM@i#|KHXB#Y06IlA+Vv26xon}c` zay3O&KWc4`d4dNCyZ6&EoA6uW%|wJrVX2aNN~#wHaNXnBE!&|@3q~t;s6Lm7qrPc< zlRZg8;Y+(8Ucex&L@=tv)JT$PYMd^JVm&TUX4bNDWgo;{xqm|V7qdez%jvBw<+mcq z8*3}B^;If{>Q~ES)#NV9bk=T2?K_fGOcUyx9L1hw`(WlyHe!pqkJ7}doTsGR=PAo- zZK&y!Uacr^>5@djCNvfcaZOO^QsV^_)$D6`A`q~-oQS->sUX87s_&xilc-Q>@{7R_ zrFZcl&~+#Z;D1N$R>O5dlKJm z@f6hd#6L56t97pS$c-(nC**cPic-xhU#p(yC)24cK?RuNh2>pmj_Q9tCACl@FpEgC0chqH*EG8p{YU9soFNW1&ZXLc`W~G z@6DUH7Y`mhP(^L!aD_DZIHN_RFeFu14NVKYUX2=#R!dgRP6KP!EKye^%R8`|xDS{V6_%BpnO@uoeptmC`vc~fBAB}Cx@-w(iqbh}vG zpYJA?pnP4&3uC{WO+dhKD%D3tx#p>-R2)x1$%Nm{KQ?ho`f%$hu}EsCo8+qG8RP*P zpoJ0wH@g7lx>Yz_9Bg(0O7hR_@NgOac7GQk$RaIGLprtqaoH%_bzzf=^>L?S7sxh_ zF~VJh{*d$w3{ke4enB`F$r?!5#U67$p|4G%c&22b&V`X;a7WOwJBj&~y3U02RnZHP z8{oPW0)_&{vM;O=as?KrN)Hr@9W(BtPzX=BXTBjJz&T|rz)SsWoztUrAqB0XRez+; zLunq1MA3Zh%k#v;Sqi}lB7wp=-DLzaN$iq9pHr!j`wsmw(jdK^WU(+ngQ{9CX2U2Q z|Igai+^xkJfm9D5aA+=^f*-VFmDoW2B$x)&wWe`&SDcJ)W#xAUaJyt5l#gc_>}lzX zogA>Q{9bYCB4DeSbL9{~5XIftPMoT!O3BOi-ytz*JjFtD*;^ERN;(H4t;GfSJQcc^60~&7v&U zRreSmDR#X8fTY;%vikThL4TSrd{uu9f~y4qgY$^wiy$Z;bc6y-!W*LmY%T-DJb`22 zE{&nOAxPUlyA$y&HBC)5r*SqK^YBI}6-4JH4-|0tO~S@}Iu!u?HiXpP@98vv3M{#* zbrM{f-QC>Xm>5h_Pnq9z%ge|3vE?sgVbrso1WEVVpvRW|-iq3!K!1!hP0XY%CAc(| z3Oz#uhYbCYTGi<0mt8eMnu1W;BmnRW!Lw84^rHFK(>@bT6mW#Z_eFI&}8t8$}-_SB^8ZPsa4?{ktzik1H8q(QPRMhs|A~U zFuBJ{^Kf}x-G51TyQbWq|A+1^(g3JhZrJ}*%da~Rsq}FvuwMLd@#fY0%d=O%vY*aQ z&Mq!qy!(~X=uB@fonh!sC!Q8B={zBITOTat>8D%Ce3=lQB54rl9=Q4ll7!cqo0G=D-o`g8vCh!uk5LK+3qmS_HV z-$6nScNgi^)8efv*gF108^X%fRS4y4Ho)3;PiAZYtzEwpP8jN67PP?l*KX^%WdWX7h{_aGY|F~r=-;KMi}Fx z8UHm%kkvw`K4hAmfcBdMG|r7JZM)fVGUrmBX34qy7Ip9bL0*QpVk1PG9Uu}jWK5{k ztor{DhUzbbp-P~rAJ|6-47KGVw6>69*DOA^;*EmSr4|3htoNIZt8JsAWhU0=y>1}ds^VlL9Fl$f)&X8^gTQ|M`GGFu_aG-4%o5GhEf%g4_p=P- zc)Fiu$MjC;jRcY{mwDxV2y+XV6^UNHt>iSivkQ>Th=Za7DT^(FqJwFMWv*PKX($kM z<+*Fdx~*$mmO&iT3f-UYE`M4EJqNP`3xCjaW?;>icRk5VyNTI#46Oibg!3 zQFaM(P#yVF{i{#vJ9)qDNfiC$;Al2OPKddV4?gC=O9n+RHCO_4R}Hb5U_lt?Ve!v zL0XM)wc^9wd?Q+>0Y$j}DpGy@g@5WXs*z2OF|&Zp;0`!|M7iAOjlmiiGw;$q^{Te8 z8$g3i8i8f%urGy@lalzVU}-S+Hlpp8yi&wr0pp~+)ieqGoJ3MqrO<~f9vfs{J4di5=dOL2>ZvIbqV zBw^B|%1QI(^7VnG!3)!rZbAqr74Jh$MZrP|UWB&pNYN6}!Ro0PB9U8avW<`lBL2G% zvruc zC<{M~HYMXOlZ_M$@3WV3H1UPg*j-%~uX=r&1_F{w*4IC?dp`&i-OE;HVP75PHs@uI zVn9=yKTLS~=baP}yYDDy`@Guq=Dh&>!@WAusfbMD) zSocdeq~xQV+;jQ)jfi`yiK+ahqbBo^9U%86SkFs9Y6VH6a&Kx)0;-V3OL$j9m;D-L zS`Uk7I!%bWGK(b1OEOesw+fy5poVg0smsEGA3$9rmMXeN&3}S%YGNs{(ztTF-b#7%_io-1NJ=)7f~sI)a@|9r91vXaOn^oU zQ0uGsV%}P6c{iKvC62vN+DmvRarlJwJNc785)U@)CG8`)hhPgV_kl1WYFV37T81%~ zYGvZ8ZkLgqs@hVpYCd#^ z;yN-elxsguq~0v4AG_n;K84~$YwaIBqiGx|=$?tt@M4Fmbn>;F%wRfUhf>*iG@X=< zq&!<#y|wVyp#Af73t@B1C|KCMV*fM_u|36r{|oQ(`hWB0P7VTt=I-Qw3g`M%6V(<{ z&KJxwcXjZkn_`!m!~x<`E;oNfvCgPXnGA}!GUb?XSnk0Zks*BoxkcZe)kf*Edwc=$7d@Qs`AIcM0S$1)IVyHv{dpWx3ztZ z(w4MNrFRP$yTuk${`Hc7oj^@AP&dU+?qm7Tz<<4=LjPzR*_pO+;PlKTJ@1Fvmb~u$ zBg_+!Q$zOKyiDS7bBTnF1YGabR%BK4Bqz$3H`g6)TLSa|m`gc5iIDHli@p_g-?3wa z2uu|vt*^W&hLVFm`}&nVSh}*+SG$JnhduGnj0fb8ld>6X^4BwWe+G7LXK{_6 z)Ux^qLQ)m#-$j{-wsb(Sz-g`nZltPPrv5wDhp2QDU! z(uOq$Mjn#yyOk4ufU!4Fo`o#*j?`uZd&^yImcMO7X-0a3?m%gNge%NY%@{DuA4_3w zRzzkwV4%7T)sy`P)Mcb=D55R{b!My7<;!SW$}&)r*0!>YG$Gx(vW%3s?Os`StbubM z0O|c{l;vgpv$QZ(UE(`-T-HF-2!GW-!7@2#{j&wF6ReX1lp(P0ZIx13-MB~4+}$NG zGH-YJ3n_tEyG+ufc$mimv(b27YLrG^#D-B!2a>|d`rR%IL`t3M{QP^DMu#FpXdX?} zZ!Y~gFfSx^3>XH|p^Y|WmPAz(>mNsQ;v$*KBWg-1=9!u18;x`7`dEqGvVQ_-ezcN2 z8fW3HqE&oJ8Nbe_c^}0jiKz39SMGcRDs52N9iR*W6>#NxEh%@)%`o&%c3B%rk*#3| zUe%!~n_p&^=v9W)(dAc}Dw>f?ruv{>MyHX)g7V73I}uCOzJG$a+R>R2`F>$LhAGs@j)7XTWyj9o9m9K8R(DLfR90?R z9<(UGaXDu!WS_tyIbfgKErYWS07}fzw3jB-wrb5E3Z>Qu3*pw6F8wu1nVZ0M<1{$Mnueam+ zu#MDyy0UE)cj*mz#E~LAN{h&G#5+u~Zkv7s|*ArGKoeJmJQ#BL6Z~5gS(V zuK<&Q{L^c-Or6%w`cICIENKuLsJ-kGZaM=*lXo6wfYk^t>zB3?z~#*b=)=-BO1o0o z2fN$8LM=cerlYT_Hsf>jbZYKI%rtm3j!nfGMTG;>;9vmM{#COm7B|i6 zb=^)NVSp45vVTgQd!90|P}u&UNG*k09U$d`%e2v;=XUzOV~?vjunQ0hl4`2-x!M~X z_6LWOHJ>qQ&L07lJ_Dd6v7XjV@>((s*Q_%Qut5I+tVXPJ#oI>1z2Q|x@$w(c1}a;v z;1|7}-37b_V0FO4M0y#)oD+%+j_LBtuwPX!J+N}AJb&*1g{^>PEHmoCoKcT!GOFa! zgZ|M$|1r#|V144wI2EjF1UVI`P;Abr2MstCzcX6kR4}Az925EoQwB18c5x{#$DYQ~ zFc1^gf36l`?yHd&c6=SkV=dLkkPW(F?DD*f^+M z?{i{{Zq)Kug4^e@xQsfL56tQBrP2H8RKzDdp*RLIDX>a%KB-i!S$9RTS$wI27E6E- zy6sk%4Qd)`CC1cFWmViOmk?FNu>rPY&Dxtx{4ksESsh9TUG@m0bjxLs1F#H|Ud3T$ zsehPEmyd9C-62`m)uN>fm2C`wBFOwDwKYXpiOx!`;DmqiC)q?QmpyWz5@%@_I)`;j zu%lgZu=p3r?up^|BFRfm!l+S&BtTZu?S23TXdv9Bx;U4EVqqa5Z4oJOtR5b9WOAz` z=`!y9mL=(eMQME5O$-vGMzZuW7Gw1$tbg(z)l7BuMRTyQwp}H4yGEuV=L)H*G_RV$ zaND5G{3A8iOs`i9%d=BY3D~d?8EF^Q>4U9w=(CLjR;O3PuwxNSlRR!h5hY{XG!Lx~ zpca1a!yrYB^A@}+Zd*St*=3@4({qn(SfWQrHDf{dh~1Bcq|*kx>L;vl4^;eud4FIq zimRS|^FAeS01R z;)Vw=;+t$DzgNC`&kekha&2hU5 z2~cgKu8&cNBN>&WdYgzFV8r1#`8x}&AZ3PZ=Rp<6B0^vQObYMND+!bq0l<$epa-Z3~5VxvGBZv5xZvuov%YTA0xK}*#0iL_tVjs zGHkFNz!caKPpHcA^_!orMVVke|&u6FDs^eDqs#TYy`~J0#=;%AK$-2mmL>)@Umla%`E%Ncjwr$<9^3g%PvX57QI0Y7rN+R<(66W zix-#BqBp3uJk zdrWycM(dxPF(Qt^LMLOip?1PCP{0IC&aoz`#t0wt2cF2kiv3|mo{`slO3yDpm&X2` z=$Z0#ET56Yqr(aJ!^7YB9Y3V>oI?U??a{At)N4Nwm$NC2W`EwHc_e$!KP+H7IL&9u zN4NY&X9EH1ben#!Wp{y_G~4X)S{}hsc5x6_B0x8ao{yF^W22C)i^-4b&vkj4XVd`|G!7^@F&wKP8m_(^P?V}41Yi$Z93#nQTj5$k=kS8=x6MD4kFi#XG^hLK^9$St<^jOt>@~-Dzmj`zg`a42y=U z+i0HLAPG~g+TsS3S~eZa#wg`7SjbRW4d!gRr+-)MrgIa3ms7PAXdh1Wd^<)n$hQtd z%z=}E&8WRGPks_#QWCNl%69`$oV=@^Atfy6K&o(eoOj>I7yqN&|3G(9P;UAAv4{za z-lQf`R?;2!13nCZjIc&{3WTmMw}TZ$hbCOX?g$cwY9W(xbg$Bn;#mGR5lJGAnI4es z+JE%e5R^Y5`7_lxIyO}0ihh?VyzC`PyG*1bfLzRz2BcKB@B6n!Ot*V$JL1rww>E-C zv(MhrxzO2|>SVYNixkqjkAf7z=IVex@<}uyZ8W>Sb{`#(Z@`5LfWMR*laMSrqp9ZZ zay4({76Wlz*1_{@S^#&8yQl#qz?PdO1ApKwhy=j8&!76qG$1e_UNSQoJ=dK8L z34n&O$R}E}0$2mYH?gqBf=v(b27rFz&Kr)vC+^SR4de-icydANolb=hMs$A^dK1}b z)6(5Zopp4_UiFB)IYj~f@k)NqI?~qgO&gx%q5B*VOVgdb08o@g_WD^b7sO#;r+@aX za2VK%eSM#rA4L#E5Ap^?6WywY{7(ph+h}R|Gxvj2f9O%d>tt!?I( zy>lQ6NgB@(F2OBEwW8#NJ<%U0ow8RJSy<27WkX(EtDmFbG`3G=H~FzW6D0Cx9)_*NeFyW}?S_jHU|JFcCsE592q4 zmzhLS_y7`k05A!#72Bu-wWN$eWuPUGLb)HPj#e&M7}Dq%QsYU|riOyh?tOPCF$84< zSd2yi38+V^g@|ovfXl-G2qD#SMaA)o<$jjCuG<*87AsoF`j2Ub7FycZ41dkS0JO9w z9a~tJ_T`^tklob5BhVs+{FBSdcn~O_U+OyPPRbT!oMn_IGVVGL>(eCZ7Zb?I=bYrd zuoKm>Hc6vc^`*M{1h~%y3(FcvLTjQHg$j$w5x@bZ=oHg77?0QV zC#)j}&ThtYBac2xve@0HhJUp(r!wKCa`~d+*>#?BLcmY-PNyJK1@lI+;HsIk{&u7xTW|b3xwGmN zs>Draib11157C#2Hg9&W7YNS3oF%#9qo%;MVwgl(JOX$Di!oRdr_TfGYY zl>6jbbt*P3+cJ~0?|&zqU_hbAb9l?F1DJcQHt<+}yt{sw>l@2W7MHrgsFA7q&MYG*@ z+VP@imM*+ki)&lMO=}?pQ<2KIOXq6uLQL5)qhZ+N=SN3xUw;$SST0L?#VIJt_J{#D z>rfVITdwW053*$`24o*2ybGlimv}d=vaB*?c(JJ_QQMuWZJ4H(VcZ25#>hbS@FF8O z;$JXtc!7UEoPPYkKIVz3!zj9Co#E^`TjJ}7lCj-s#B+`5r8*jzV<%}X6G>u5$&yk< zFd$Zdlw)_X;(wSh?EZXrvkww0kdv+~R_5is?TQwp%OxOMfZSkAv;f(`%c7-zVYi(I z%u}`?UQXFp_D24%%(`Efg$p8EkSt?&*-~CbK)wLU$nNsRF%{YU`EK&7#sq46e2$-N z@c3M$QOs|?Ieg;urz{Bmi`+eK#qZx-Jr1s(63=Yi(|=QT#pIYHVlrJ(R;=2|f@Q_H zi^!~pigMDw<%o%Xt5c@=n^OpP3UM#j{QNLq+#Z`p^pbIu1s>zUJry|&g^vG)-@Hc6 zyhgO}pF%(QR1_Irs&(C^C z|D=;szI}DLf!YM4o+!16dmc^qQyO{Erz9JVFEZw- zW`E4GXZdhAV}rx~;Bau%f5!SxkB%T-byT!>5~|%DuY%A~JK|L!EDYEtyYf2#0o=8` z+J^rDgo(oZ4-LScT;%~K3R-niK;8!=E^On;t38DvM$lc9>&d1;LMztTErCRbA+7}C z!@wZB%5MPzz-89=L?BXOxSxLPw|`NCA%Ea4Y0wDpR6)&rxg1hQ(oEQerNZDhLvMhccM)8<7C!d+P|V#3m- zx=(pdbe9Noeoe<54btmHLRV2Lh@@7oY5*h)6B~{|S>PbMvZw*Ptg>vH@c8z0-hVRZ z6aBu0+ZsW{+MehDfV1Y*EUcKMirxV)Y!E|hfn|T8WhpLgwN^(D)%~6FG)vCq10a?J zP_^7S1wh8aI0b;X+QcdCT;z^;SIsVR5d3PJ+}PC2Ucr&rUEUNUtA)F~0ZP`!yPPY* zzUD4}(8^`LB}6UDK)bNJ9TBzKOn(RXeq%a7bQ*n21^BN@1!yy3{)fs4SZY=Y2IIF} zQ?o0#LNl*I<03M!=l5a}*`+EXt0)0ooh?8OK^N77W+hudOdkk_Zn;Y?ke><$Tbn7o zt&|eA5nPv=rYR+IIAslscm9ZB_iabp+tgdC{VG%OB|XUe1EsqtU`5LGuYYPQ`i(Y} z6-wDDAC+~}vi5Ox699RDlPyN~F0#<$GuD4{bhKe*`wjIHaVP&}(>PLXv?f9*i1Wki zIGV86(hM0)C+tva|Bt2<=f!XnBAY<-@R-9917R%CY-g+(eeT zE@B>f(Ig#j0Q+sD6L$>}*|?*mTDiyWGjWwvDlqiOeH=HT1YIhQnS8_9h8FB@?Yf_> zRDa?uq4P|m($c#ffBKLO#dQ=@Ul%dT(j3B4`+}X1rJLM1 zIc0~Ztk=7`avrEXuZ;EaR#|bdyx;}|bm)hrRn@I;$SE9ZOkCp_c0K@ZvP2GB_@EU< zlUqp>{p37-t8i(0oPVv-#ImMFCPrCG8Exunp2p(NkFtbG)^{G)QCX40GkGG*66fmb z#mVLS7q5Dkzg)UY>N=9geNuHKjyj>yWa{TVM<)papmZ4qKVw- zBX%&FvLqf|T}`+jUR}|f?BEyq*z|cANoD=OQzR{Xy&gU%c24@6TVIvX?K;U%h{KR{Fr5f;u8g zQSe0yr^DeI-E-v-R(Z5A#A?*-m5;3>ZRjY6k?C(qiSJ$gb09VPz*Jb7I;+*Lf|V51 z5l!woft%c+8GjDNh-V3P1isgiMf+v$CoG|xK4Si~%jU94H5WPi0> zlz`zOi^5<=cmp~%Dm>i*g^1@3hnpKi&~TKq~oJ?(jt?az1DvEF66xq+P5P0S}< zb}i(D^PcMZzA7Aa3c6gk(2IrMK=sGwa+5pQ;AU~GV}H;BSA~v9tJX>jbseC9yJn%$ z^36A&imAB-@5W~>bklZUAvc?kw)aHdm)!JnnD3Hqd^nZcC-+*v?M{rFI`{Hq-BK@q z){O7l(fI0Hck<{S&_BQb{_+3(e^5&Y2qmNh1!_3}07w-A08mQ<1QY-W2nYb3Z6sF! z000000Jbv}mlbu8fAZ)2|7pEiUiQ>=%lVW4{c~Pu z;Q5oe5=vi+aH+)nVxCtwH{I|DukRMadc5kI*4Ma7*P2L}C|n?$Vr8qG3AIF{*_x`! zf8?r@iTEAe`UUq_{A~PH^Cy)SYrdG@@On*G{JI+!?Nk5YCEf5WU(=9Q!~F5}f2_(! zyo@Jmx8TY77+7P08dMqUG>bve~gx8#vi(2c7MfsADV%#+Ir4^<#)We6!U+d z1W<1Q^jiRfQZkVWB6%ZqHHO(oVJ&er(F1B`)>@jW0G}_rp`%5&=Gi*aa>@OfSTYA# z5=s;w`oRnRL=NH+X8T+F&hxCDZS z)mKlqpC2H9JCfC@6mLta+*$+(O%B>XMtxEuI2El8N*Aw%gAzHJ0s=YOV?y~gt>4b_ zg4XAvQMm&_8bg%6cyFvpiAt5y8)sY!DtqOFbEtKx$jMdh)c`iAFO5e8f9DMi1LE{d zNVMESqIbv$DJym=6tW?>0I>`x$u=hPk$lln1)KDA`G1VG&y>u%<(Vt?c8;knM4FVZ z>=M*6DV?Q3qC0D?bWumrEMu_va>s;Mx4gX@X1Dz+eDhJ^}G6fY&%t(2Q?8!!WFIhWT zS(xOLU}Ynu;ke2+tjg+QR+!47Tk^%mYrXppYQJ5w&9-%P$_Sk_bfIJ&tgBRnl(`X_ znM^W@rJ!^Su%8-;i!rx0s9poo{2vb*eQ}tg5Ks6T?PN_Q>cXhE>ntuM!%H*-w)^*x$C4+n}-*DM?@u1rD-U4Tw1k zLeU}@v#M~+0Tp{HsF&}!?>o>ltX|>XU_&-OYjh(cW$U|iPvp6*$e|j>u9oU^OEJxg zM1kI0V^S>SN`^0Sm#=>n3V+7<90T^-%3@Ab7Ud5ZjT%&eo+OUUu^N?Yb6YN@>8hyIOx~tP-ueJR1JQR5&53$bWb(R6S11_(SH~ z_Gz=>x?jB?!zB|u`nY=C@*PsW9P+BCq{Oyh%WahKaBP#X(RfLWTo2I{GRSmv{~6sd zDwK^pIVX_lOgCdLdgCR5Zg&%Pi^rC zYjR9Luj$=G_uN{qQPlBx#Y^sSZ=2WGqxhf8+l#OK$KIvzhn9k}^M<92RR>o}jV31J zm5JFGk|k%2tVdBeW+`3)>c3i`bAR6hwCw(@mR~H@xt8KkPk#`#RjvwO5@qxU$YZtz z1gq?96g3nPY)Nr4+n-~8v7&NjAnt&t6e$~@LjXIV$4PLNbw)lbqp1obfG3LS3e~t; ztgfyeYF2~OzHe-Sqw_`Tp_z}#LL^1W7zqR(9Vo$OWnzF65*ccQHG$PsP@BM;wY$8f z;kxyog>M=Efq$@7oxObZeGHb|;R>OZO-jua>mcC%t;s=@%*F^Kog!mYQhX$=()FC- zk3Y^bs>@hX8e7j_{`62{zE5+rZI6}6)TZE?6C16o#e>YTN?{e6Z>^Xjm9VF48~VGi zv5i;EQcp{i|NpxaLix=Pmzz@IH_v^$ruc8yl&y+iqJK+H2`C`K&x?>nhXY$0qn~p8AkY(+t2VnYCR5-1fk+##$v54`Ju4HdbgSe3rHb3B9wn zNSC?pNv)G;3R7tcN79tx#(WBuZKbwjq_Pdf)W#$L@`NS$YBM6{O;P zfb;=LAe|V-(SaVTh?Hl8_EKsRvQ#)uAB2?@CmYK@(Ec}}o2~9P)5Krf?7HRBo9AbO z6Lw6)UwX-K&_JOZDwdQ+Uzwb?B`4BQkd#@vB!423kc7y`MJH~3v3{8BY$9~?)OjOR z9^CviHYVj@IG~XV4IlinH*kuPSj9>)mBb<()%7j;{o}^d!;osPMI6~a=SY8#S^gq; zYfV8TN>xZ?1)-ajUMu8Zbud>fb#%uRg2&)}@i1+D^X+Nt383swGZg+Jg7x8TdM4EC z?3b{E6&`;&Q0z((26e!X+zAz-uEB~z)xsYWOELsQrY7&MH5C8&cyzy=|=jH}US ztC3&IsA_-)2E|I@f~?dMk7PZfQR$nSaNi>q&+I(RPNx#Lt%qdT49*Uw(AElX=ok>- zMO13@X*(u>|YTdTBv*kGGg=;GbT;SoQq!E6)|qB(4n33O8)HN^!AYzj$9R#!&tt(7K=+V2|&G#dDJ7x(sPoVTCZ9=V;< z9NTB7;OUamC80nH7+b0ekC}{C9`)2mSP6gF2en7yrjv6Ic0Glihij+Mv)3fZLnZ;P zNN4uNOSr)zWp$3)xs5ipk;Kq)p%OZ=qtNzzvl{ra*}%6=CbrP8`tGV*{x_9!dDRm- zn#=Xw?d_@`HZN~ze|q`P@wMX_-zvPZMw2p1l!9MZMoULNgqUFIp%u|(1@oYfazKCi zn)BQB@Nsd{j@}0GSAK8Oc8}iKao2Kt55PweR0tIw&pVS?8suhbHQ7;A&1gs|y_%en zxc%B)-Stq&YbvYvztAbC{`Mo5hbD(1=cFA$0153D8WS1Ocxgi}rj&&SA|sjpP6BSC zYfAdv$Kg@hXri)SB;=4}tqode6DfbWn8}h+zIl!0!}Q*<#ogVq8^)c;^*GZV2OH-q zRtNW#VHyM}c<-EJ4n-DGJvs{VEK@*;*=h@izcX!mdihj+V{jnBx^}qH#&$NgZQHiZ zjW^jO6K7-Fwr$(qjcwbxIp@~*Ro$tc>8hDuJvCF^&)W~iadXo9hRDBNZvMohVstMl zBa>8Va1+urt3dw|Q^#1l@dOcF^+b8PqF!Hd^Wxb3shjXrEpcjK^Sc8Lsc7LaVH~>zr)?M}{hkoUq;Y4{(umxY4C{-NQSX=ciC+y;eRMnu!cnNrT6; zKcNk)s4?SyhTKSEkxADi&RiU{{p%PjY+BvUd4IcM(~)WPN^*-xny@!Os!Q7>6;%_q zE^{%sb5iSxMb2q=LCSuO=r^q^d$9-NKruIGPD~8}JEjdCSCSeua$S{jvKzTX;+BbU z&IR&IKem>@1VK}hF-2gR)q@mYRI8 zG!`N@HD>Z37c{n0H{~Y?%KQGw9SG>%RX4e9)=SF!DM_VEwCAvcU=oRaC33aZf2>EI zfH5Pv?@(E2;KXa#n?do8HJ1+J0%E#Ingt6@h`fch`Yibq`n0}vsta8kxy-+p3|Q&V z`Xif(tbY$up45Y?LW#zz3!k}JFXf??cn$j>(=9$--ENmC-q#_zh%^}f!}y8U(K+lw z^L+)CNM7!FMqXYsoM!aw5;HU31iZGAH3r+wPosMT0wz1X&ogOc%hyoK?eD8K2$Me8D)PGPKUN$_9=$GGJ-IqI{q6|0$ z8VEErG{_fpI{$-CM*klSh1QH7`(LnC+>L(xUsM$bi6Qo1RP_%Qqk!!{sOrlF5G@&P z&Kf;=ve@Q(vSA7zBrx({1G*NCIi5|zHm0OZ?c_!`Ehp>pIKI1yJH;9)e^5b*Fquz2 zc`L5`seYM6n z_tdT)Osvee-B(JX@cj5#Lt*)p^q&Ga(Z-FM3Fj2HOSetHzlgTLgF4(oEDrxeOErkz z)+t`bJ6)aAxWsP>)Bgk?qw2W&J%g(`s&O(+Q#d#Y=xVGCgE7r`F3sNqWi+>1d=tX7 zBL8C4$U^GRq6!RsG)gbCCeSx9o~pBWMsNP)H_8_n&exr~-ti2YbV()X?-Y53>=Js^ zqsOh_SY_k}w%vH8Ifq}f&khdE-+W`FQf*nY;4V}Ukc@>71xbGpv0$glZfJ6$Z70MS zbyPg;ZcFSq@^RLMkY7`>f{QaL4@vDE>3yTmyV0lk$z<5XwJI{xFym#%?wFP=r{kiV zOZa*nN^FK*ZfW$ze@`B`Lp$O3BP|25*T}Y5c zi;}(8xF9AOfs#_=vosHxD<3G?e z)YG^JKq_7|qi%dq!U$CD!RveCV5OYxTVyHy&xEPHBVt;mm2q7}a+Ui8aYq14m{wXuGG-)lUUh0+)0?Z7h-4;VcxMmnk|R ze3`H85x;C6;Y$uLSLu^`msrQ3@11T5zDVkjiq359z`Cf9{6k52*b<(3styt78_S!W zhg#r$h32B93=x~QOI8?>D-A#;s<0;3z4xs!Pr@h_=rxtHSIS?qEOB7+W!6D3_2MJM z%eieDV%Nv0hdrPe9B$KXa@Q{lSgc@7YK_3}vUxq<}PuCq+Ph)>7 zd_B!((x>jqMU&huEFG^UHy0gm-l?tT`uq2*8)94g@MXV=Zwz`&KyC+$x=f;8LMpD* z2}9!IM(M~1{A=$3&#+r3^+%J|Gcs~pP{(E#e;uQEexd(GEEH>&g_K;9lRnbE?U!i+ z5Eu9-M6ASMd_PIMiv?^Iru}#&?c;;@XnZ&%S&l;BLV=>XTojMX;n=8T-sk}#@k$%! zrZ`wi#*Kc4A-j%!RGgwhkr-zi!CKT=it@%2yPe8NziIgumkp?}<`)22v9^4g>I&?r z*q?|m!cq=juUXsc#p)Sv`oX*Cio)l9e1uvuJ`?0K1K9_i#W@Z?cwYW>#qH6g5rEbrL{fLVy zh3-9)m6IzXXa9CihW?NcDVwDI1E5FX_VIZ1(2DaQ_2NOq;_+EbH*WOUlB``;h%Rdi z?aXFulsT&;*2C%xJ+u~-$7iRU0tJK1Ec#388NQyuL)cv3|Lw>aB;ZQ zZ{AmX7dXC1-TH3kz!6TwkyVXxD<^c;6wn3Mkbe2wLDJbFDyXIVnQ3=7^#j3G$|GdD zcz#Usb?k{SIx}g~8ezG+AFR2`;qFEECpm?~mmYiPar5Kp>SVF~xc&I(;DF&1@;{4! zv7ZF}!%!d~F?j#G2!Q^7tAOMfQf0JcSxF3XVBKwXB(`g__-HnZE2N1mCBat8jUL5f z?;j_2r1#K`lsR2C1hF>p5NQvn;OLsEQ@2Bn`)k-M^y(tKF9=LnNi}YYlySxYi41f3 zjNZHJ`|@k|#pJtf-J{oK`&U_g%D}VU&;hvQ&KL{d*DZ56?N;cQEc!jY`KbonpBuXY zWbvJc`R{x{teo-vzQLn?-+M)kQ+_YA5Pj)UO+%~T(ACMDO{&rVSq;3;GYmJ{(@OnnZ zdEoe}XnLdK_H)0O*>IkFdoIqWt-w7)S|IfAo_y=x$H!x}K}YA)>*nC9yMsR9Lvh3) z>J2KnR8LQ8!)h9~xMy1dV)xi zylK3v7bBiO^pcjv<3hR=@J0d-NwIMhm|{)yMsa2ZUqHR_vh7LY)?_rikT#{-L`~zu z{Msl({aB;&p}fR=Lpi;`bQ2FYpGi{;Z%(v#2QS}s3@8(K$*(O~QqN8uqTc^hfpbT~ zDjbFiO!d{WcBc=Xkbh*#n)+atk86i@zwI-y2t+IZ1G3Zv3qnyx=@vkE^xUh^JIg)W zCj=g|E0tKF<@GV6pY#N##{5s(xe1L^V*6c2q`Q}ZX05!yt9Phv3XWs&YYl!1*(a1c z(Hr?0VMKyoqr^D8Pw3gSs0#xMUMP{4ZZ)-j?GCAkgHYauA9^VIbajkTQ}0~f_K{}Z zqzDN`FQ`oMIwTt5KXHIx(klU_6}Y7Pk67ZPIG?x2!o7x`(?bsJG^;7Z4a?GV6Rjjd z90skmiWm9&(}&V)-r5#1rnqng;>x|P#Xb&oEjK=YD3plvak>YhE?prh4-wtTp<(RsHsB&3|QTb_mMEhmHV_xg(0SC=PC-Z}55A zb2Iac^gG{malrZV1v|4{1=L3#M>^utm~Hwk;Yh3MizMq%Qs+McOU*~wqJQQ8yvok@ zDd!KB*GR98KX?UT9G!OGYyR}fzH=e6q^3ArhL2>A?j+wa;O%w)+?wv+Nxo50d)rWP zV7&|8YPB}gLaPSu)``dZQoZoyl9w*?K}2e2M`;>CSp;oY1(7~gzAlw~#8q}Ne;(9J z4Z#f@SMDV^tJk#?9i%`haA_DO^&|fo$$n=Z?Uk-^{TqmL1c1fKU)~I1`DAx z8?s+M;^WOJ^09+9<^5>Y&xzH01m1(}hKghl?6<>&3<O`5dJ3ATWe{ z1;>pEbC6$d3lBYqf%hNt78H=jlAu)CwyW{>F2{GSqBj^t|A1g;=l59y`Zv?!BeoKI ziFLzXB?`@}0(cD4@IMUB3M)sTIET&=0Qw}R7EpWckZeV6q2I!%+?ZIEAHTT)&N_#X zLy=zwMJYEF4KqU!54X>hnKfLPUUz{^oe@g!zu@dDpfVDCw0@dnGay^!kQ_bQF^y<( z%Q<@2{>xcF%50}|_H(-%d;VU#FvHw2FKOYo&Bu80q)U^!m5R&Y?-7bomj-nydf`jG z5ukV^g1A;78=G-#^G{S#@znXkt9UQhXJyKE9(qVfR-G$3PEh*inNmmSrttYI_A7<3DVLwRyjmVD^Q zomtp4&#@h%sM=o?bQK>Jt!8GcET|9fUhQ#8g5Vyz& zp`1NKwQ)p>+o!h#F$8RZ)?tBQH1^~NYuG>3=l)s{1z9L?!c_}YyG-x8 zpFsRpNMXPH!tQHY&tT7?VjWN6#2twY3ixkf&;=^-qNGmkQdYKfF+BQWUTRNzg5@o* zi&8Ne=eVz?KOHyUs60fz=(>7=sN97@mQ^w|7*SC_gJR$ZvU^Hq&P7B-;sJZ;ECTeV zbqnk^Q-#-po+l#qW^sB0+VC{`kg@7;l;5idb4+L2WB(aG^~4L%zgcm&thH+^Z+&mY z&h{I8D5OQZ}nub z7tRb#jqoG1L9lP-Uk2&5UTT%Tbr~%3rYu>d4tMhIl_!XktvpITp1X;nnP|vA>IfK>kzAUuc?cXNqSF9>Q;+tPk`1vP zOxv?k`tzs+#8DKTqq+>M%PJm^ucl{0C0WVGu}Usjr}F2H_^}{2dHDzPUnC?)BJm!1 zuAW_8FRNzQ>%|TdW}DF2y9Dw2XT^B@5vHv4hegm|Hl-{6@jQ)x$+PebIW~vg&p?cN z;ob&N%$-%WL@BE>I0XUK?;7&7ppCyg`x8;2kYuC#(CZDFMx1s)QriWSP$fXlP_*QA za~QMBz$3(B2T`Qq<^|==;C6GqB1KBVevFrbuP0`0#OyDCLeGo9Hg7P%p8d=Fy6bfT zrYDczTO;Gb_axbr8HpPZU$G#-H zqY9`H=6$3{2}lp#2K3q=y6=u_<}n+TNXBM?Y1Y;b9pMm{pfusffrrOfZyD~g<-8Kav zJ8{}`O3a@yt z{6fXHx08j-H9|unM9^74Nr1z5r7u2LnNltwgLZw1U2RD>$JzytFt!v3hcDcJK)o2F4Ki8CUKcDOJlkLKjS zangIXcKcYF4beS18tBGko*Kv%D)V4cHPoKn>=k9MPalI*OEc{I=)RX{8}Ak2yVd6B zG*6yUcEp0HgW^8R(29P*!$(W@ZEeV}O{(Sj0zt{)atM$#?FcRUGj+S7=HaBwU?RD@ z&H-S5Lj4zT!S}ml6CBH?2nfz+%;hwahg%ui1?<=zC~gs}7u0c^7iJok5x6XqaY97U z@Z5T5*L6ySDkRY87ceo($2xG>H5p5f$SBAWNkmAOoBXE2Nw1Ryrx8{$xHWePs*Kxf zfve2{6F}MpNkMFx{|7m&Q0MQzoz4TeX_V+A4Ocv=$nd3E=Yl_F;5||GWCgv;-zjsz zz8i3Of_T2x*g5AkBckS5lh?M+dny};lXE0GCnh;#-)f! zf4*EV-rO*^t)WIgRfCAj(LWZr?^d?t0v|Ugs?_pzn>KA&7 znXV$AsxvN17xa)ArCMO&B$m~eho!fvl#4y6lwYm#Cgz9kALasfQ z0M1{ac3@V&RT200Um5AO5i>FYK%nF-^5w?QQkOV~17YQdz59j;DqFa2uCfxxO=`Z? zv!2N@V%R+>_kboT`u<_apTndz!~VG2ol}k%xOKlaUhRceP(zIGSJiPGOL7|+FnDra zngw`vD)moimACW1^{USC0coRxlmXlJ zC~*gD9QD*Ybnkjk8obTXD(_(m?l)r=(4fM(Vr@K&)w6UCykDy7 z(MvT-nc&se(w;PCzT&G`H2h88`+$F2e#ukCKj4R2R25#Jt)=~%BCS^mMq6O`1QyFv zx}p0hu*Sv<+xFmc&iFG9ft+*HY!KgaXde-|bOM}5P3nT`288odrC>2D!fLz#)iLZ- zw_?Gm@6ZvD%0PW49Y2F6>NHq^73dRd?nmZoWkuiHRX*j^Kq9NYo|!8hsa{PG^3WkF z%UPr_-Oj+&TR@s1=p)A5b*Ya-EK&;Fr*^2}ez242ZLVCd`ts5e0B5tQi>ZlA)?mP7 z8n(h}N4;9#N$4YZ_bq)%Zmn$%!IO1gvyiU2?&;zEsK4v!`h7b@&7eMT90s?$~n?9*w?H)k7`TN>3khiUR0y?o6!Dy3~^@V_rWAYJV1 z?I+HLJWS@tt$sfPx%9)c%NoZr>Nx0BDl?V7O+Gsga4W~9=gO9B$*eM#_%ZB?Jvbml z;}ml$L@*~^s@k+>DE-RA!eNSyO)76UJ1RhNshdepF9e$r^<+|_(1-mXrK{Bbtq~^c ziY5#{cvQZqlJ2N;%rPg-ee{FOYp*8S>k>KSLN5#>Rg5?w=Ng~4RxsH_)sDwMHG$A@ z9Dn;!&pw&a6u>9PS}uv}7u+4!pU6~+D#Lq(Ac)I(ND7045(YCc%1sGBg^Moi5e#@svg{3&nKaPKVWM z!c*0@b)>pC_Nmby{$ zUKc-)p^tx-0XYXofjgk+i}EKiknny`e;t2o&}b1zwX$g+yFarn(UIXem%@?Cy=D3# z(4mG{C@rsk_`Fn(OGy3&Nl%X z8-(01jvNFew~nM_a}MJ$qtt;ht93+FllIN&>_e8zW(wa~6Sp|gqN)oC#A5>R%r=-h zQ!NJMxk^aTRN20v|6E*iG7nku+B2P)mznyLg9_j+l)(l9 zE(z@{(QD9lg^Cl;@;lh*ovJB+IXdxepTX|cZX%IYYzVlG$5yO3gu@Dtjz?`c{KG16 zqCbOIqn6MbyK~yg#_DUceJ||;v@;P`b3Cyv0Rn_jTCoh*F!w1uBqcu0bqGz;=caF#Q z`GlqOo0!cnx$qssORV!uGdAFLXt%xVBNWif7KWB8v0S!c2!+UW9+kn-$sW#cPj`Qeo(nBB9+w1H@8$T22=w2!n)gx}5`%%9J}u`Ia~ zlYC#nu*_)CB+*`Ohn!9;$C8KhFeUHRt}F5|+oT4QM#ShDN9sh#bZ{rkuGyCwCWIrj zir{C`e(nA$`Wu5;yR$0+SQ>7ZlKJX4CPyig z*mt4}<`!oulUN3N$7hL2e+Q+L(?B2lDpx6ilxQeMs$ia=tL`=^SAWDz=cv)-K?R*8 zN*88FPzWBDA*;5ybhi~sOuYbMgXxOc=^!#OA25_Ul4L3-JR>gYqoC6q-fU!hzr;Wwv=TCzX%=z;Ct%v=3&~MtDyV7|ikQ|( za`y||1_-Ql4gRo5It`T6-B~xu5*x^ZCVTHGDgXQjLUvHQ!`$JMy&eFUVa_bCz^mQn zXUc5?sGGe40fjv+rKXe-lObFWhaM^kS*rCENYTu(nuBn?==sK!Vbmdld%aWF8+rNL zRnAv#eNn$4My-hL(bOlBNpz^dQFF9t;`furK^^CEsj>zVG2Q8+++?V4gpT84I9A|Tkf!;a%^V>zgPg}jYg)TiXS%8*7YM0&LYC~Ov(VG5 zZaZ|6HechmmwQc^1D+q!?}tHu#*4S_dC$>Uc+I(`7^%t)5+KvIG#5h*Zut{tDeH=- zu&|K4K7ME+)z1$IBjSWYEyFJ1NLr39B(@OOICwG=McPs*_CI@WI9eDxL zR3XfTn=%%AEJ9)&{OAY!fUB#Ji^&HL?IUNNm;sDpTbmr<3c}YqN^jj43poFbr1djP zJzWoMGS5kX5qMYk8S7HY=Ihz(uOpXXP{?XbV5v)sLrSawl`+){RLdyzhdRYUO)v95 z2}llJNkBwHG{~)`Lzx*)idno3Ff`PC*sz|Es1=a>^h~D){mDeTm5{Z7tFVj4jby3h z>oc3jm@^BkMxjIfUHE31`gc~Ks|?a8K+V$*?@yE?D5c*>O8LMGEm$lK$cHaBvh1H- zRFIkPwOKv90Dj=yEuJ2hf@NE`)c80Wv%vs^zhDO?JlS(-9(LG|9mRLN%$SJ%w@c;> zN=C&ZCeS8SRz%2}%oy2^J`-=;5D$nw;;N}pYWHy+BRN|! zRX18hNfPlb&s-Jzfrt-j@_gByz_cr;^=;5(!>fXRK{hKW6wiW5u96l56l=^l7bU4o zlI$vyiirK+%Oe$0T;QE;jOjnmemtc-4~wG&~0Ml>%ouL{8rTGe0Ou7g7+O zbRIxS{}wGx$e=f%np}Z)>w&Tv6DIqQQk+a)ETuBRSW+is?oeZ;ZD|@#{CS|4Q>Gb~ zE5Qhna!<0zi(o?YcsIb42y~$zH>KW2P?`&XcMC$W^nWwY?5|NiH1zUMVnbk85x?t0 zbA<>_&r8hXpToQk;+_~`vtqFgv`rjhLxBRrMKa+DENGMU=mYcq(2?rNmxZwm^33E7 zi$Xef@RD52DTb6tLhF$(AQV8QUQhb{9P$&o;SAi#YQ{R4O<+w)R$KQxM^gM`o44YgDn$=w{hXlsjN&n+7u0|+$7n2 zuBLG$Bf1a1iwi82p=~55+TW*BymJniw=J~pPL)o>tF|3nWsET=ebP&jYk>5?S17*D zjB+?J`TYN-l=@6=&-r#vIUd^;+71t8uGiAJ4fAdzs9JI6l)gmz17@qm+5#)O8S`|s zZ(4-^7L|R{|NgALW>efwiob%{N)4Qhb44FMIT9n5o!%KqEy%rPR|n#nvYi79E>{Z_ z15gf2upmo_kGO-r>=lL3;7Snoa-Xb;hZ7QX(+lv6h@+^nL1``#HY>kHwo&p$sweaY z9`m{va{hBiEv26=D8Kg`GF;pJ-iUJsiJlHZ{X>~6uKx=5C&NyU0Rpv+LS~#E8EKCz zsp8wLIivXgP-#gZZa=_vdk-qDMeF4$hNF3JUc#D4UPQ1k?D8G-o6u+0DZ&stDr1|K zVFW@i2z9KdBec`0+!F-I+w0`1PAcgab($t$5?M;i&=RF~j9RXTRJ>gLMkI4O;EUzB z<#hS}FN8q_hvVxFrt;^EsaHm-Q%gO%f0waiWV4f&J}HU6Z3VVL{ufJyO+xLwz3I{} ziiEzl%j=?cgJ|ANlG;bYe6oR1+IS$Om4Gs;2|(QwtyI;|4EXD1-M(m17T9mHGQTp@ zb!%pZb5FmzI*KXJtW(Hw(4sZd7XPaOMntVO}0NV`=eE2 zNwGP{Hi-fgIRz*3#&U5$6em(iZW`>%*i}6S#jucRk+=`r#@FVpBU(MEu!8)3EjbwU zmjTo9xg!M!a})xDJE~uu74%So>#|%oR^0_ql8%Y=^`W+M9ZiZ=gWkjU`BNn3Xq5IA z8t+UWDs!AVVy=Noi2jA@&e_m?gy`n}V$CRPaR@P%#9>4G|DZPN7OK$?zp~w-$b{;p zExRfcs%b1OO9c7b0`0qK@o(ONHPQ%QXJCBhpJ~*t8N2gPduVbl%ZQ&O2FNr>Vihhh zM7)h1{tFu+MSjPO2**A=xpU!~`Ti4})$pKYbs09-*ATm}e9=;((#9Qm$$5b&!olB( zgfkP$0c*H1G|lzbDtAQ)`}vBKX(Mb0_Ph=5+W4>w?x+~C*98l4`qIR?F1~r7!?Gqm z{`UOE{WNITG$=psRe$IB^4L#i%AS58OQM&9I#t6us`*1LjqHPSe3#eI6sm=E*_s4rjhUAZO`4)Gd5+u(EW=M0yr)GNL zLkvhmyWfhj^bqcS8=V;yZV_rQpC?+Zy@gt91{oBm=XJwTSZA3o_eTzZ)N&-Ed#DMW zZgoJBosUi$X)KYEi|NkU8Ig#d>h*_n%zZfLuVbdvrXI5378k#RNWFekRi)Y{gVlWs zhjKVuiWD;Arui7ihlb=1qXC=Ma0d+Qlz@GN?AK5*(-jKgO|=&rEXbSqD-~o)wRpr% z$=H5smA^=Ujz#cvfZh~P(-k^`T!J;S>^Che5!&O~-J^C)g^xw$S+ezSEWWDUaK4=T zb|n`QxvjeaW3prTPVozeN`B z%*W`CM>abhf_HK9bWd?JfPi0gvLbkmWwyu9{zjs4|LcuNPkaWD2fmF(IS7|r8J)^m zs{2nvaOUUtwEP-t|GbWKDy!NnSJkE3qIPryC^4Y+6Z2}V!!Hh ztFnK6tpP7~MMZCxx7nx&PLe-;qWw6lG0%b(E!>iROS_DJ7*&!%uR04)k%gEOwO#}6C20#Xqbb|&b+s{P(nx*93FOqqp4&+=sp+z z`((i^nC?^Z7|TA$>@vLv`ZKA3V9z9Dra4TZnAg)q`=nIX#Yi+Cq>;H^cl>zK^cgCGh7syGpe)y})Qkt<; zaW9cMDb{BO4PPAE$mbsxWb>?Fh3O2LYhyd2vck?TStg){jE07PwU?bB%~}n_xu;XB z+7h=Rj++cCa#EWec6q+o3@3GpHjiff$J$1rU1|Vj;VjKxdU81t-bdxB{>7JP2#}aS zluSlmUK;zL@g0@%P4vf33fq*K_D=W}Jx9rx>umxeG^X>YGL z+_62mUCtLU@C^N;>z}B6o>F_h%tSRE%{RVJ^HxzV-0HP$G8FuU)Tg57*2S{aWe_*S zJqrLQ1vh#MX&h=XCWff!T3|D?a){h%VrOBn%RG4lg{jD#VA+T`Lv!w?+Su>)#Rq@I z5*Ai}g}l$Gq(SP5BuK|yvfQ`@9V!0)`rAvnc=;YPaBFYrRFnYaPoF4@yww6f#j3C+ z`f$&mozO^_Inm8yqte{4*nXU#w?btK^((+DPb#H~(0lfRZa~8cgm)@Gg`I{J=7Q6V z@eQ_HHi-vu`|`nf56je(MDzkXcdgcpc*a(puOq!L3T)0r6f|_fYV)VDu!TtKv{D8| z_+0N5Ey6eE!|$tz1$yLykRX!$u~~7Uu^5RfpS+5|(@0cZCdFtlvWbd$L4d^0Y??6aa0cdf!Z`j>LaiJIl#5x;A;i`Sa#oZ}=_ z2;-BCJU9OZ-SHEaDzi+G!NNm7o(<>yBbF*L+~q>EBY8lXKnH{&PxKR0iS@%avcR{- z@$7jLpEa51OUGrCfT-Wp?|i+|04{*%W7KePkv{w9d*NtBhqs3YO^!~Dnp90;uoKu4 z81Bw94<wF?TgwD!XH^1?ShqmHx=Jxd z+0jFK2e`yiX^;b&CWay#B&DBqar>^L_4YVzl-Q!H8V|Z>O_e?6ljIg3je?LSWK%xo z`Bj6>*GX}Hm0IY=89Q$kVIj*Ku)yDybvse#-0UMqX|aP1En5C6t@M#sBW+c!yk)Q_J&saUg^AeBy)0*YIUx8T?S!KG46?_co z60~`xZMB6jCj?Dx>U<*yxeD=q{W?qud$a142x>5L)nmVj;O3K>V$ zJ0lIJIt=B?YM35biO{fMxtQWEX=Pg*<&uB$h{%h`+C_C_sv5_fL6E27P5U&P!6wgQ zWSYtDL^LL@ga5uUr~vKE7_jqJ(W7mf-?t&8CUONpl=YU;qGL{OP8>^5z`#_taxsce zJlbVhxNdjE4y@>lW|5=mv2Wl3> z)1cqq2lJ%L)=T%}&o}MYQc1SOyhmxLHCtoMD+Zn3f!UV??RxucV31F~$$~0nto;(8 z%~P!0GbS)+z6Rbrjyfe5)93gLv#Ptjo_G7Qi{9LaweK4C&sPwOy|UJV6Dxij99*uw z)sgPLak#8j4SPnQuHB5bg(D*I8-s~93QfT#xoyloRC?Ul93;X1314!q_h{mc_Yur4 zrwPB+d3Cy+RDCI(SnMo>zA<1H8wpSNxZf==oWjJ2egZnc!=CrE?(93zDMA;7^IDM7 z=8hDV+SYc%p?4hZv`3PgPYxfe@(MPIYNTbwq9SCC9JMP-j_1m|UOB^W8`t;k92eLv z8+(FBr79Y%fz*1_5`4n%5(8S#%lSVVHb(v=y?7pK1G~o4@lWjEoumr!NbtY6M-|UM zMSWDl+yT6po8^aFZ*N;?-#uXp>@0U>IwF=fc7MYzqvr{MF3^iWclLXBczBf_kUnCnfo68w* z;$1{_@=vuLXw@J(J5u~7#xsd5AyV7W?IFt*U<@dJdDGsRyRo9v0FsVtd`&&Gf6FnF zQqn&}LC~A03^?%rFro={wCgApIQ@A4Hv&tXlM@0SfaKDL#y3gC6j@ByLH-4jeX%_m ze=OIS2>P$}$r0(tc6tBciXxHV3nQWx((MI7A4XLZ$Aem&9TH7s`&8vpDs zIdlZ)SJfOb#{M1Tg&!R9h!XuI>}=#osBG-;dAFP>A-AarL%gZef6IG;z&m5M zzb-A@lzNyuF$%$zva4q&S%`J za?PywN1N1~{+kLk*^#hT>5-d)i12?E7aNA{X>R8$)&SUfV1;oUx5shBZLApU#4EHk zcKFm^tX@!SGp`(ng>xI*sw?C7(i__ThQWBJU^_UCUs~?-K8wla(V8873Y>JB9*=jg zVr@kscM?^_zdSkz9=x);g6hO>IK2EnnzNe!R{Z!1f+–Zl#ZEfXhUF~WbiICL& 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%0ASfS!%zb1JYOD>#-Z3>R_O7o9?LR3t#g&AZ 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

e~QSFM}ri*~Np-LXi$vP7hyp%j{aXqNs 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 @ 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%0D&lFk>oo?+`c5GDb!mp(*vqwY6 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 i$g$2=J&7kveG{p3{=>c04>B{ar{P%y<-7+Eo delta 898082 zcmZ5{Q+Q@w6J>1Mwr$(CZL8xqw#|-h+qRu_Y^P&RfB)6Y+?-mgs-9=xRqb81PGL_Q z=y+fqD4dckC>RtBOq-K-n&v+?*TyFj|7OjQkszx<7dnpVWmQ`{`Hgthst(wVty-P0u})RfDbpg7 zoD(ZxV{E>U3_r_QmWDhPPuWZ8RrVlk=;?2|SADY%svHvc57mdnY^V9KS%0#Fe*(8) z*E3!%rmHS^k^*x3=L9$$(Dz6odbeYlObPC>YsjVnw2vyPo!q+y zZuId95Bq|D2myLSPV|=uTZ!qP%XAMB=zn&vJ-QgXM&hf-)3uzVm>p9z|47v{%TV)u zafho&Q*=k^U?RQhY5YNcqz}zVeX`hMB(NH&cj&Z(3Wm}#^HhD-e{Q*2%j_Fjqdt&S z8IFdQjN;PaGdjfyK?8vqf~N{*5f@DWB{g?aQyB>X=?Bb>d|U1|a|s)!>gTcRs)(zb z^Sh<9E)&ItRvHFW7RxSz7l|+-le``=TMN6SW2q>^fh&obg%@Ktq7zSwfa|wm8LI{r z%+}`jYzNQePnoFBjo0zDf~|u!X9sxT%~Mp-2efkVRIy9*U`R&}0Jp;<$Iw`4egeHK z4Ct?NHUPBEkclC50FEm+CT@HjB1bjMh zzm3D4eaZjuyPQ*uZ#XcA6WLROB{HS3tKrar5CNJ7Sf*6wan6WWB+Ph*!J4WLIaNeM zv0LqzRIJ^$>Iq~Ds_P194$D&;Dah@qh

    4FCXS5UDT!ztu_@y{A&x!({ZBKICNYv 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%0DJ41lgO{;Piwl!#(?vR4A)?jE@Pf)_owp_TD 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�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

    y;6KD_r=14gg4M9glyB(<@!Yf~s1ch4= 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З~R50YC)eBODE)(7y)GvSF$1REfM!-bcP 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⋙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

    4FhyCP=ai*~gp%9nU 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Ξ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

    #c2*7+qH5wTL!$iL+!h@J_GZIAhmpU2H7f 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%0A< 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